pih-appointment-widget 0.0.39 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/App.js CHANGED
@@ -47,12 +47,15 @@ const BookingSDK = {
47
47
  bookingWidgetInstance = document.createElement("div");
48
48
  document.body.appendChild(bookingWidgetInstance);
49
49
  }
50
- const PopupWrapper = () => {
51
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AppointmentPage.default, {
52
- config: config
53
- }), config.showIcdAssistant && /*#__PURE__*/_react.default.createElement(_ICD10Assistant.default, null));
54
- };
55
- _reactDom.default.render(/*#__PURE__*/_react.default.createElement(PopupWrapper, null), bookingWidgetInstance);
50
+
51
+ // Do NOT define a component inline here. A locally-defined function creates a new
52
+ // component type reference on every showWidget call. React compares component types
53
+ // by reference; a new reference causes full unmount+remount instead of a prop update,
54
+ // resetting all state and re-running all effects — including SSO — on every call.
55
+ // Render AppointmentPage directly so React updates its props instead of remounting.
56
+ _reactDom.default.render(/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AppointmentPage.default, {
57
+ config: config
58
+ }), config.showIcdAssistant && /*#__PURE__*/_react.default.createElement(_ICD10Assistant.default, null)), bookingWidgetInstance);
56
59
  },
57
60
  closePopup: () => {
58
61
  if (bookingWidgetInstance) {
@@ -117,7 +117,12 @@ class AppointmentErrorBoundary extends _react.Component {
117
117
  // SDK Component - accepts configuration from parent app
118
118
  const AppointmentPage = _ref => {
119
119
  let {
120
- config = {}
120
+ config = {
121
+ "email": 'gk.jayavenitha@powerholding.com',
122
+ hospitalId: 'dMtEGhak',
123
+ apiBaseUrl: 'https://afiyaapiqa.powermindinc.com',
124
+ token: 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcwZmM5YzU0YjhiMjQyMWZmMTgyOTgxNTQyZmQ0NjRlOWJlYzM1NDUiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiSmF5YXZlbml0aGEgR0siLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbGl0ZWVtci0zY2M0NyIsImF1ZCI6ImxpdGVlbXItM2NjNDciLCJhdXRoX3RpbWUiOjE3NzY2ODM3ODIsInVzZXJfaWQiOiI5N3hFYjJoSFptU3pWWlFvcHM4Yzc4bzRxUHcxIiwic3ViIjoiOTd4RWIyaEhabVN6VlpRb3BzOGM3OG80cVB3MSIsImlhdCI6MTc3NjY4Mzc4MiwiZXhwIjoxNzc2Njg3MzgyLCJlbWFpbCI6ImdrLmpheWF2ZW5pdGhhQHBvd2VyaG9sZGluZy1pbnRsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJtaWNyb3NvZnQuY29tIjpbIjg2N2ViM2MyLWFlMDgtNDlkZC1hNDNhLWU0OTg2YjZlZDA5YSJdLCJlbWFpbCI6WyJnay5qYXlhdmVuaXRoYUBwb3dlcmhvbGRpbmctaW50bC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJtaWNyb3NvZnQuY29tIn19.pUN8E40VNtIqGe5bwBrZerVAgPiQJn916nOrz-uXPZkdIEOJeC5Bxrt_byRcow7CEQrlpEvpJrOZOUReJRTRjX-sIQ8feT3oSI3dBqiI2A_KzfnqUnMJj7KAVTbGwsqvHLGoChVgkL75YDs_Npz-3arOVsMwo2KaGCLkthM7NqxB1oe22kMyM35f90nXFRhpoBK1jP3Dhp9NiCVhu7XDO0mn7_SMsCIwtuL09L3TNMPOUU0yWVysKwSXbPYNS8qaISRDaami2zjErzHmFn1KLTyC-UKHv-C7h2QnDP22WjHNkjkwAxcxlvoqOGFw1V9kFv_rIGE7rt7OvxVPEbD15Q'
125
+ }
121
126
  } = _ref;
122
127
  const [storedApiBaseUrl, setStoredApiBaseUrl] = (0, _react.useState)(() => {
123
128
  try {
@@ -163,16 +168,25 @@ const AppointmentPage = _ref => {
163
168
  const prevToken = localStorage.getItem(STORAGE_KEY_ID_TOKEN);
164
169
  if (prevToken !== token) {
165
170
  // New token from parent (e.g. Flutter re-login) — clear stored credentials.
166
- // Only increment refreshLoginTrigger when there was an existing appToken to evict;
167
- // if appToken is already absent, the SSO effect will fire naturally via !appToken.
168
- const hadAppToken = !!localStorage.getItem(STORAGE_KEY_APP_TOKEN);
171
+ // Do NOT call setRefreshLoginTrigger here. App.js uses ReactDOM.render (React 17
172
+ // legacy mode) which does NOT batch setState calls inside effects. Every setState
173
+ // triggers its own synchronous render. Calling both setAppToken(null) AND
174
+ // setRefreshLoginTrigger(+1) produces two separate renders → two SSO effect
175
+ // re-runs → two login network calls. setAppToken(null) alone is sufficient:
176
+ // the SSO effect's needLogin check includes !appToken, so it fires naturally
177
+ // when appToken becomes null, with no second trigger needed.
169
178
  setAppToken(null);
170
179
  setDoctorIdFromLogin(null);
171
180
  setUserName(null);
172
- if (hadAppToken) setRefreshLoginTrigger(t => t + 1);
173
181
  localStorage.removeItem(STORAGE_KEY_APP_TOKEN);
174
182
  localStorage.removeItem(STORAGE_KEY_DOCTOR_ID);
175
183
  localStorage.removeItem(STORAGE_KEY_USER_NAME);
184
+ // Clear any stale error state from the previous session so it doesn't
185
+ // flash the "Access Denied" popup between renders while SSO re-runs.
186
+ setTokenError(null);
187
+ setError(null);
188
+ setCallError(null);
189
+ setRedirectToHome(false);
176
190
  }
177
191
  localStorage.setItem(STORAGE_KEY_ID_TOKEN, token);
178
192
  setStoredIdToken(token);
@@ -469,10 +483,21 @@ const AppointmentPage = _ref => {
469
483
  const fetchAppointments = (0, _react.useCallback)(async () => {
470
484
  console.log(appToken, 'fetchAppointments -> appToken');
471
485
  if (!appToken) {
472
- // No token availableforce SSO re-login so the next render re-fetches automatically.
473
- if (idToken && email) setRefreshLoginTrigger(t => t + 1);
486
+ // No token in closure — SSO effect handles re-login automatically via its !appToken dep.
487
+ // Do NOT increment refreshLoginTrigger here: that would cause a second redundant SSO call
488
+ // on every token-rotation render (double-login issue during Flutter re-login).
474
489
  return;
475
490
  }
491
+ // Guard against stale-closure calls during token rotation (Flutter re-login).
492
+ // The persist effect clears localStorage APP_TOKEN synchronously before the
493
+ // state update is applied, so if the stored value no longer matches this
494
+ // closure's appToken, skip — SSO will re-run and trigger a fresh fetch.
495
+ try {
496
+ if (typeof localStorage !== "undefined") {
497
+ const currentStored = localStorage.getItem(STORAGE_KEY_APP_TOKEN);
498
+ if (currentStored !== appToken) return;
499
+ }
500
+ } catch (e) {}
476
501
  console.log(doctorIdFromLogin, 'fetchAppointments -> doctorIdFromLogin');
477
502
  const doctorId = doctorIdFromLogin;
478
503
  setLoading(true);
@@ -486,7 +511,15 @@ const AppointmentPage = _ref => {
486
511
  };
487
512
  const response = await (0, _appointmentService.getAppointmentsByStatus)(activeTab, fromDate, toDate, serviceConfig);
488
513
  if (response.status === 401 || response.status === 403) {
489
- // Token expired — clear stored token and trigger re-login (SSO effect will fire)
514
+ // Token expired — only clear if this response belongs to the current token (guard against
515
+ // a stale in-flight request arriving after a fresh token was already obtained).
516
+ let isCurrentToken = true;
517
+ try {
518
+ if (typeof localStorage !== "undefined") {
519
+ isCurrentToken = localStorage.getItem(STORAGE_KEY_APP_TOKEN) === appToken;
520
+ }
521
+ } catch (e) {}
522
+ if (!isCurrentToken) return; // Fresh token already set — discard this stale 401.
490
523
  try {
491
524
  if (typeof localStorage !== "undefined") {
492
525
  localStorage.removeItem(STORAGE_KEY_APP_TOKEN);
@@ -865,6 +898,7 @@ const AppointmentPage = _ref => {
865
898
  if (!cancelled) {
866
899
  setTokenError(err?.message || "Authentication failed. Please try again.");
867
900
  setAppToken(null);
901
+ setRefreshLoginTrigger(0); // prevent infinite retry loop on persistent network failure
868
902
  }
869
903
  }).finally(() => {
870
904
  if (!cancelled) setTokenLoading(false);
@@ -952,8 +986,13 @@ const AppointmentPage = _ref => {
952
986
  }, [showDatePicker, showAppointmentTypePicker]);
953
987
  let fontFamily = '"Nunito", serif';
954
988
 
955
- // Error as popup overlay (main page stays in background); auto-redirect to home
956
- const showAuthError = tokenError || !appToken && (!idToken || !email);
989
+ // Error as popup overlay (main page stays in background); auto-redirect to home.
990
+ // When idToken + email are present but appToken is null, SSO is either running or
991
+ // about to run — suppress the popup entirely during this transient state to prevent
992
+ // a false "Access Denied" flash on every Flutter re-login.
993
+ const ssoCanRun = !!(idToken && email);
994
+ const showAuthError = tokenError ? true // SSO explicitly failed — always show
995
+ : !appToken && !ssoCanRun; // No credentials at all — show
957
996
  const authErrorMessage = tokenError || "Sign in required. Redirecting to home...";
958
997
  let content;
959
998
  if (tokenLoading && idToken && email) {
@@ -323,7 +323,12 @@
323
323
  // SDK Component - accepts configuration from parent app
324
324
  const AppointmentPage = _ref => {
325
325
  let {
326
- config = {}
326
+ config = {
327
+ "email": 'gk.jayavenitha@powerholding.com',
328
+ hospitalId: 'dMtEGhak',
329
+ apiBaseUrl: 'https://afiyaapiqa.powermindinc.com',
330
+ token: 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcwZmM5YzU0YjhiMjQyMWZmMTgyOTgxNTQyZmQ0NjRlOWJlYzM1NDUiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiSmF5YXZlbml0aGEgR0siLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbGl0ZWVtci0zY2M0NyIsImF1ZCI6ImxpdGVlbXItM2NjNDciLCJhdXRoX3RpbWUiOjE3NzY2ODM3ODIsInVzZXJfaWQiOiI5N3hFYjJoSFptU3pWWlFvcHM4Yzc4bzRxUHcxIiwic3ViIjoiOTd4RWIyaEhabVN6VlpRb3BzOGM3OG80cVB3MSIsImlhdCI6MTc3NjY4Mzc4MiwiZXhwIjoxNzc2Njg3MzgyLCJlbWFpbCI6ImdrLmpheWF2ZW5pdGhhQHBvd2VyaG9sZGluZy1pbnRsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJtaWNyb3NvZnQuY29tIjpbIjg2N2ViM2MyLWFlMDgtNDlkZC1hNDNhLWU0OTg2YjZlZDA5YSJdLCJlbWFpbCI6WyJnay5qYXlhdmVuaXRoYUBwb3dlcmhvbGRpbmctaW50bC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJtaWNyb3NvZnQuY29tIn19.pUN8E40VNtIqGe5bwBrZerVAgPiQJn916nOrz-uXPZkdIEOJeC5Bxrt_byRcow7CEQrlpEvpJrOZOUReJRTRjX-sIQ8feT3oSI3dBqiI2A_KzfnqUnMJj7KAVTbGwsqvHLGoChVgkL75YDs_Npz-3arOVsMwo2KaGCLkthM7NqxB1oe22kMyM35f90nXFRhpoBK1jP3Dhp9NiCVhu7XDO0mn7_SMsCIwtuL09L3TNMPOUU0yWVysKwSXbPYNS8qaISRDaami2zjErzHmFn1KLTyC-UKHv-C7h2QnDP22WjHNkjkwAxcxlvoqOGFw1V9kFv_rIGE7rt7OvxVPEbD15Q'
331
+ }
327
332
  } = _ref;
328
333
  const [storedApiBaseUrl, setStoredApiBaseUrl] = React.useState(() => {
329
334
  try {
@@ -369,16 +374,25 @@
369
374
  const prevToken = localStorage.getItem(STORAGE_KEY_ID_TOKEN);
370
375
  if (prevToken !== token) {
371
376
  // New token from parent (e.g. Flutter re-login) — clear stored credentials.
372
- // Only increment refreshLoginTrigger when there was an existing appToken to evict;
373
- // if appToken is already absent, the SSO effect will fire naturally via !appToken.
374
- const hadAppToken = !!localStorage.getItem(STORAGE_KEY_APP_TOKEN);
377
+ // Do NOT call setRefreshLoginTrigger here. App.js uses ReactDOM.render (React 17
378
+ // legacy mode) which does NOT batch setState calls inside effects. Every setState
379
+ // triggers its own synchronous render. Calling both setAppToken(null) AND
380
+ // setRefreshLoginTrigger(+1) produces two separate renders → two SSO effect
381
+ // re-runs → two login network calls. setAppToken(null) alone is sufficient:
382
+ // the SSO effect's needLogin check includes !appToken, so it fires naturally
383
+ // when appToken becomes null, with no second trigger needed.
375
384
  setAppToken(null);
376
385
  setDoctorIdFromLogin(null);
377
386
  setUserName(null);
378
- if (hadAppToken) setRefreshLoginTrigger(t => t + 1);
379
387
  localStorage.removeItem(STORAGE_KEY_APP_TOKEN);
380
388
  localStorage.removeItem(STORAGE_KEY_DOCTOR_ID);
381
389
  localStorage.removeItem(STORAGE_KEY_USER_NAME);
390
+ // Clear any stale error state from the previous session so it doesn't
391
+ // flash the "Access Denied" popup between renders while SSO re-runs.
392
+ setTokenError(null);
393
+ setError(null);
394
+ setCallError(null);
395
+ setRedirectToHome(false);
382
396
  }
383
397
  localStorage.setItem(STORAGE_KEY_ID_TOKEN, token);
384
398
  setStoredIdToken(token);
@@ -675,10 +689,21 @@
675
689
  const fetchAppointments = React.useCallback(async () => {
676
690
  console.log(appToken, 'fetchAppointments -> appToken');
677
691
  if (!appToken) {
678
- // No token availableforce SSO re-login so the next render re-fetches automatically.
679
- if (idToken && email) setRefreshLoginTrigger(t => t + 1);
692
+ // No token in closure — SSO effect handles re-login automatically via its !appToken dep.
693
+ // Do NOT increment refreshLoginTrigger here: that would cause a second redundant SSO call
694
+ // on every token-rotation render (double-login issue during Flutter re-login).
680
695
  return;
681
696
  }
697
+ // Guard against stale-closure calls during token rotation (Flutter re-login).
698
+ // The persist effect clears localStorage APP_TOKEN synchronously before the
699
+ // state update is applied, so if the stored value no longer matches this
700
+ // closure's appToken, skip — SSO will re-run and trigger a fresh fetch.
701
+ try {
702
+ if (typeof localStorage !== "undefined") {
703
+ const currentStored = localStorage.getItem(STORAGE_KEY_APP_TOKEN);
704
+ if (currentStored !== appToken) return;
705
+ }
706
+ } catch (e) {}
682
707
  console.log(doctorIdFromLogin, 'fetchAppointments -> doctorIdFromLogin');
683
708
  const doctorId = doctorIdFromLogin;
684
709
  setLoading(true);
@@ -692,7 +717,15 @@
692
717
  };
693
718
  const response = await getAppointmentsByStatus(activeTab, fromDate, toDate, serviceConfig);
694
719
  if (response.status === 401 || response.status === 403) {
695
- // Token expired — clear stored token and trigger re-login (SSO effect will fire)
720
+ // Token expired — only clear if this response belongs to the current token (guard against
721
+ // a stale in-flight request arriving after a fresh token was already obtained).
722
+ let isCurrentToken = true;
723
+ try {
724
+ if (typeof localStorage !== "undefined") {
725
+ isCurrentToken = localStorage.getItem(STORAGE_KEY_APP_TOKEN) === appToken;
726
+ }
727
+ } catch (e) {}
728
+ if (!isCurrentToken) return; // Fresh token already set — discard this stale 401.
696
729
  try {
697
730
  if (typeof localStorage !== "undefined") {
698
731
  localStorage.removeItem(STORAGE_KEY_APP_TOKEN);
@@ -1051,6 +1084,7 @@
1051
1084
  if (!cancelled) {
1052
1085
  setTokenError(err?.message || "Authentication failed. Please try again.");
1053
1086
  setAppToken(null);
1087
+ setRefreshLoginTrigger(0); // prevent infinite retry loop on persistent network failure
1054
1088
  }
1055
1089
  }).finally(() => {
1056
1090
  if (!cancelled) setTokenLoading(false);
@@ -1138,8 +1172,13 @@
1138
1172
  }, [showDatePicker, showAppointmentTypePicker]);
1139
1173
  let fontFamily = '"Nunito", serif';
1140
1174
 
1141
- // Error as popup overlay (main page stays in background); auto-redirect to home
1142
- const showAuthError = tokenError || !appToken && (!idToken || !email);
1175
+ // Error as popup overlay (main page stays in background); auto-redirect to home.
1176
+ // When idToken + email are present but appToken is null, SSO is either running or
1177
+ // about to run — suppress the popup entirely during this transient state to prevent
1178
+ // a false "Access Denied" flash on every Flutter re-login.
1179
+ const ssoCanRun = !!(idToken && email);
1180
+ const showAuthError = tokenError ? true // SSO explicitly failed — always show
1181
+ : !appToken && !ssoCanRun; // No credentials at all — show
1143
1182
  let content;
1144
1183
  if (tokenLoading && idToken && email) {
1145
1184
  // While checking token (SSO in progress), show a simple loading state instead of the full UI
@@ -3644,12 +3683,15 @@
3644
3683
  bookingWidgetInstance = document.createElement("div");
3645
3684
  document.body.appendChild(bookingWidgetInstance);
3646
3685
  }
3647
- const PopupWrapper = () => {
3648
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(AppointmentPage, {
3649
- config: config
3650
- }), config.showIcdAssistant && /*#__PURE__*/React__default["default"].createElement(ICD10Assistant, null));
3651
- };
3652
- ReactDOM__default["default"].render(/*#__PURE__*/React__default["default"].createElement(PopupWrapper, null), bookingWidgetInstance);
3686
+
3687
+ // Do NOT define a component inline here. A locally-defined function creates a new
3688
+ // component type reference on every showWidget call. React compares component types
3689
+ // by reference; a new reference causes full unmount+remount instead of a prop update,
3690
+ // resetting all state and re-running all effects — including SSO — on every call.
3691
+ // Render AppointmentPage directly so React updates its props instead of remounting.
3692
+ ReactDOM__default["default"].render(/*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(AppointmentPage, {
3693
+ config: config
3694
+ }), config.showIcdAssistant && /*#__PURE__*/React__default["default"].createElement(ICD10Assistant, null)), bookingWidgetInstance);
3653
3695
  },
3654
3696
  closePopup: () => {
3655
3697
  if (bookingWidgetInstance) {
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","react","react-dom"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MyPackage={},e.React,e.ReactDOM)}(this,(function(e,t,n){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(t),r=o(n);const l="https://afiyaapiqa.powermindinc.com",i="/appointment/V1/consultant/all-appointments",d="/notification/V1/consultation/online/initiate",s="https://ittisalqa.powermindinc.com/call?token=",c=async function(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=(e||"").toUpperCase();"INPROGRESS"===a&&(a="IN_PROGRESS"),"UPCOMING"===a&&(a="UPCOMING,RESCHEDULED");const r=o.apiBaseUrl,l=o.hospitalId,d=o.doctorId,s=o.token||"",c={hospitalId:l,doctorId:d,fromDate:t,toDate:n,statuses:a,appointmentType:"ONLINE"},p=`${r}${i}`,u=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const o=new URL(e);return o.search=new URLSearchParams(t).toString(),fetch(o,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${n}`}}).then((async e=>{const t=await e.json().catch((()=>({})));return e.ok?t:{err:t?.resultInfo?.message||"Something went wrong!",status:e.status}})).catch((e=>(console.error("Fetch error:",e),{err:e?.message||String(e)||"Network error"})))}(p,c,"PIH-Appointment-Widget",s);return u},p=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};console.log("initiateConsultation -> config",t);const n=`${t.apiBaseUrl.replace(/\/$/,"")}${d}`,o=t.appToken||"";return async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4?arguments[4]:void 0;const a=new URL(e);Object.keys(n).forEach((e=>{a.searchParams.append(e,n[e])}));const r={"Content-Type":"application/json"};o&&(r.Authorization=o);const l={method:"POST",headers:r,body:JSON.stringify(t)};return fetch(a.toString(),l).then((async e=>{const t=await e.json().catch((()=>({})));return e.ok?t:{err:t?.resultInfo?.message||"Something went wrong!",status:e.status}})).catch((e=>(console.error("Fetch error:",e),{err:e.message||"Network error"})))}(n,{patientId:String(e.patientId||""),primaryPatientId:String(e.primaryPatientId||e.patientId||""),hospitalId:t.hospitalId,doctorId:String(t.doctorId),patientName:e.patientName||e.name||"",doctorName:e.doctorName||t.doctorName,appointmentId:String(e.id||e.appointmentId||e._id||"")},"PIH-Appointment-Widget",{},o)};const u="pih_appointment_idToken",f="pih_appointment_email",m="pih_appointment_appToken",g="pih_appointment_doctorId",x="pih_appointment_userName",h="pih_appointment_apiBaseUrl",y="pih_appointment_hospitalId",b=720,E="pih-appointment-widget",w="data-pih-widget";class S extends t.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){"undefined"!=typeof console&&console.error&&console.error("Appointment widget error:",e,t)}render(){return this.state.hasError?a.default.createElement("div",{className:E,[w]:"teleconsult-appointments",style:{fontFamily:'"Nunito", serif',background:"#F5F5F7",boxSizing:"border-box",minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",padding:"24px",textAlign:"center"}},a.default.createElement("div",{style:{maxWidth:"400px"}},a.default.createElement("div",{style:{fontSize:"48px",marginBottom:"16px"}},"⚠️"),a.default.createElement("h2",{style:{fontSize:"20px",fontWeight:700,color:"#1a1a1a",margin:"0 0 8px 0"}},"Something went wrong"),a.default.createElement("p",{style:{fontSize:"14px",color:"#666",margin:0,lineHeight:1.5}},"Please refresh the page or try again later."))):this.props.children}}const F=e=>{let{config:n={}}=e;const[o,r]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(h):null}catch{return null}})),[i,d]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(y):null}catch{return null}})),F=n.apiBaseUrl||o||l,v=n.hospitalId||i,[C,A]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(u):null}catch{return null}})),[k,I]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(f):null}catch{return null}})),D=n.idToken||n.token||C,z=n.email||k;t.useEffect((()=>{try{if("undefined"==typeof localStorage)return;const e=n.idToken||n.token;if(e&&String(e).trim()){if(localStorage.getItem(u)!==e){const e=!!localStorage.getItem(m);T(null),W(null),B(null),e&&K((e=>e+1)),localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x)}localStorage.setItem(u,e),A(e)}n.email&&String(n.email).trim()&&(localStorage.setItem(f,n.email),I(n.email)),n.apiBaseUrl&&String(n.apiBaseUrl).trim()&&(localStorage.setItem(h,n.apiBaseUrl.trim()),r(n.apiBaseUrl.trim())),null!=n.hospitalId&&String(n.hospitalId).trim()&&(localStorage.setItem(y,String(n.hospitalId).trim()),d(String(n.hospitalId).trim()))}catch(e){}}),[n.idToken,n.token,n.email,n.apiBaseUrl,n.hospitalId]);const[M,T]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(m):null}catch{return null}})),[R,W]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(g):null}catch{return null}})),[N,B]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(x):null}catch{return null}})),[H,P]=t.useState((()=>{try{if("undefined"==typeof localStorage)return!1;const e=localStorage.getItem(m),t=localStorage.getItem(u),n=localStorage.getItem(f);return!e&&!(!t||!n)}catch{return!1}})),[Q,L]=t.useState(null),[U,j]=t.useState(!1),[Y,K]=t.useState(0);t.useEffect((()=>{M&&H&&P(!1)}),[M,H]),t.useEffect((()=>{M||(D&&z?(j(!1),L((e=>"Sign in required. Redirecting to home..."===e?null:e))):(L("Sign in required. Redirecting to home..."),j(!0)))}),[M,D,z]),t.useEffect((()=>{if(!U)return;const e=n.homeUrl||"https://afiyaproqa.powermindinc.com/";if(!e||"undefined"==typeof window)return;const t=setTimeout((()=>{window.location.href=e}),2500);return()=>clearTimeout(t)}),[U,n.homeUrl]),t.useEffect((()=>{if(!H)return;const e=setTimeout((()=>{L("Request timed out. Please try again."),P(!1)}),3e4);return()=>clearTimeout(e)}),[H]);const q=n.joinCallUrl||s;M&&String(q||"").replace(/\/?$/,"/");const J=function(e){if(!e||"string"!=typeof e)return{};try{const t=e.split(".");if(3!==t.length)return{};const n=t[1].replace(/-/g,"+").replace(/_/g,"/"),o=n.padEnd(n.length+(4-n.length%4)%4,"=");return JSON.parse(atob(o))}catch{return{}}}(D),O=N||J.name||J.sub||"User",G=()=>(new Date).toISOString().split("T")[0],X=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,[V,Z]=t.useState("upcoming"),[$,_]=t.useState([]),[ee,te]=t.useState(null),[ne,oe]=t.useState(!1),[ae,re]=t.useState(null),[le,ie]=t.useState(window.innerWidth<768),[de,se]=t.useState("today"),[ce,pe]=t.useState("today"),[ue,fe]=t.useState(!1),[me,ge]=t.useState(!1),[xe,he]=t.useState("all"),[ye,be]=t.useState("asc"),[Ee,we]=t.useState(""),[Se,Fe]=t.useState(!1),[ve,Ce]=t.useState(!1),[Ae,ke]=t.useState(!1),[Ie,De]=t.useState(null),[ze,Me]=t.useState(null),[Te,Re]=t.useState(!1),[We,Ne]=t.useState(null),[Be,He]=t.useState((()=>({x:Math.max(20,"undefined"!=typeof window?window.innerWidth-b-20:300),y:80}))),[Pe,Qe]=t.useState({width:b,height:560}),[Le,Ue]=t.useState(!1),[je,Ye]=t.useState({x:0,y:0}),[Ke,qe]=t.useState(!1),[Je,Oe]=t.useState(null),[Ge,Xe]=t.useState({x:0,y:0,width:0,height:0});t.useState(!1);const[Ve,Ze]=t.useState(1),$e=$.filter((e=>{if(!Ee.trim())return!0;const t=Ee.toLowerCase(),n=(e.patientName||"").toLowerCase(),o=String(e.patientId||"").toLowerCase();return n.includes(t)||o.includes(t)})),_e=5*(Ve-1),et=_e+5,tt=$e.slice(_e,et),nt=Math.ceil($e.length/5),ot=$e.length,[at,rt]=t.useState(G()),[lt,it]=t.useState(G()),[dt,st]=t.useState(),[ct,pt]=t.useState(),ut=e=>e?.id||e?._id||e?.appointmentId||e?.patientId||JSON.stringify(e),ft=e=>e?.image?e.image:null,mt=e=>e?e.charAt(0).toUpperCase():"?",gt=e=>{if(!e)return"#4C4DDC";const t=["#4C4DDC","#1CC3CE","#FF6B6B","#4ECDC4","#45B7D1","#FFA07A","#98D8C8","#F7DC6F"];return t[e.charCodeAt(0)%t.length]},xt=()=>{const e="asc"===ye?"desc":"asc";be(e);const t=[...$].sort(((t,n)=>{const o=new Date(t.appointmentDate||t.date||0),a=new Date(n.appointmentDate||n.date||0);return"asc"===e?o-a:a-o}));_(t),Ze(1),t.length>0&&te(t[0])},ht=t.useCallback((async()=>{if(console.log(M,"fetchAppointments -> appToken"),!M)return void(D&&z&&K((e=>e+1)));console.log(R,"fetchAppointments -> doctorIdFromLogin");const e=R;oe(!0),re(null);try{const t={apiBaseUrl:F,hospitalId:v,doctorId:e,token:M},n=await c(V,at,lt,t);if(401===n.status||403===n.status){try{"undefined"!=typeof localStorage&&(localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x))}catch(e){}return T(null),W(null),B(null),K((e=>e+1)),void re("Session expired. Re-authenticating...")}if(n.err)return void re(String(n.err||"Failed to fetch appointments"));const o=n.data||n.appointments||n||[];_(Array.isArray(o)?o:[]),Array.isArray(o)&&o.length>0?te(o[0]):te(null)}catch(e){console.error("Error fetching appointments:",e),re(e.message||"Failed to fetch appointments")}finally{oe(!1)}}),[V,at,lt,xe,F,v,R,M,D,z]),yt=e=>{te(e),Ne(null)},bt=async()=>{if(ee&&M){Re(!0),Ne(null);try{const e={apiBaseUrl:F,hospitalId:v,doctorId:R,doctorName:N||O,appToken:M};console.log(ee,"selectedAppointment"),console.log(e,"callConfig");const t=await p(ee,e);if(console.log(t.status,"response"),401===t.status||403===t.status){try{"undefined"!=typeof localStorage&&(localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x))}catch(e){}return T(null),W(null),B(null),K((e=>e+1)),void Ne("Session expired. Re-authenticating...")}if(t.err||!t.data?.token)return void Ne(String(t.err||"Failed to initiate call"));const o=n.joinCallUrl||s,a=t.data.token?String(o||"").replace(/\/?$/,"")+t.data.token:"";console.log("joinCallUrl",a),De(t.data.token),Me(a||""),Fe(!0),Ce(!1),ke(!1),Qe({width:b,height:560}),He({x:Math.max(20,window.innerWidth-b-20),y:80})}catch(e){Ne(e.message||"Failed to initiate call")}finally{Re(!1)}}},Et=()=>{Fe(!1),Ce(!1),ke(!1),De(null),Me(null),Ne(null),ht()},wt=()=>{Ae&&ke(!1),Ce(!ve)},St=()=>{ve&&Ce(!1),ke(!Ae)},Ft=e=>{if(0!==e.button)return;if(e.target.closest("button"))return;e.currentTarget.setPointerCapture&&e.currentTarget.setPointerCapture(e.pointerId),Ue(!0);const t=e.currentTarget.getBoundingClientRect();Ye({x:e.clientX-t.left,y:e.clientY-t.top})},vt=t.useCallback((e=>{if(!Ae)if(Le){const t=e.clientX-je.x,n=e.clientY-je.y,o=window.innerWidth-Pe.width,a=window.innerHeight-Pe.height;He({x:Math.max(0,Math.min(t,o)),y:Math.max(0,Math.min(n,a))})}else if(Ke){const t=e.clientX-Ge.x,n=e.clientY-Ge.y;let o=Ge.width,a=Ge.height,r=Ge.posX,l=Ge.posY;const i=300,d=250,s=window.innerWidth-40,c=window.innerHeight-100;if("bottom-right"===Je)o=Math.min(Math.max(Ge.width+t,i),s),a=Math.min(Math.max(Ge.height+n,d),c),r+o>window.innerWidth&&(o=window.innerWidth-r),l+a>window.innerHeight&&(a=window.innerHeight-l);else if("bottom-left"===Je){o=Math.min(Math.max(Ge.width-t,i),s),r=Math.max(0,Ge.posX+t),0===r&&(o=Ge.posX+Ge.width),a=Math.min(Math.max(Ge.height+n,d),c),l+a>window.innerHeight&&(a=window.innerHeight-l)}else if("top-right"===Je){o=Math.min(Math.max(Ge.width+t,i),s),r+o>window.innerWidth&&(o=window.innerWidth-r);a=Math.min(Math.max(Ge.height-n,d),c),l=Math.max(0,Ge.posY+n),0===l&&(a=Ge.posY+Ge.height)}else if("top-left"===Je){o=Math.min(Math.max(Ge.width-t,i),s),r=Math.max(0,Ge.posX+t),0===r&&(o=Ge.posX+Ge.width);a=Math.min(Math.max(Ge.height-n,d),c),l=Math.max(0,Ge.posY+n),0===l&&(a=Ge.posY+Ge.height)}Qe({width:o,height:a}),He({x:r,y:l})}}),[Le,Ke,je,Je,Ge,Be,Pe,Ae]),Ct=()=>{Ue(!1),qe(!1),Oe(null)},At=(e,t)=>{t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture&&t.currentTarget.setPointerCapture(t.pointerId),qe(!0),Oe(e),Xe({x:t.clientX,y:t.clientY,width:Pe.width,height:Pe.height,posX:Be.x,posY:Be.y})};t.useEffect((()=>{if(!Se||Ae)return;const e=()=>{if(!(window.innerWidth<768)){const e=ve?350:Pe.width,t=ve?60:Pe.height,n=window.innerWidth-40,o=window.innerHeight-100,a=Math.min(e,n),r=Math.min(t,o);a===Pe.width&&r===Pe.height||Qe({width:a,height:r});const l=window.innerWidth-a-20,i=window.innerHeight-r-20;He((e=>({x:Math.min(e.x,l),y:Math.min(e.y,i)})))}};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[Se,ve,Ae,Pe]),t.useEffect((()=>{if(!(D&&z&&(!M||Y>0)))return;let e=!1;return P(!0),L(null),(async(e,t,n,o)=>{const a=`${e.replace(/\/$/,"")}/um/user/V1/sso/login?hospitalId=${encodeURIComponent(t)}`,r={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({idToken:n,email:o})};return console.log("[getTokenFromSso] request",{url:a,body:{idToken:n?n.slice(0,50)+"...":null,email:o}}),fetch(a,r).then((e=>(console.log("[getTokenFromSso] response status",e.status,e.statusText),e.ok?e.json().then((e=>(console.log("[getTokenFromSso] success",{hasData:!!e,dataKeys:e?Object.keys(e):[],hasAccessToken:!!e?.data?.access_token}),e))):e.json().then((t=>{const n=t?.resultInfo?.message||"SSO login failed";return console.log("[getTokenFromSso] error body",t),{err:n,status:e.status}})).catch((()=>({err:"Something went wrong!",status:e.status})))))).catch((e=>(console.error("[getTokenFromSso] catch",e),{err:e.message||"Network error"})))})(F,v,D,z).then((t=>{if(e)return;const n=function(e){return!e||e.err?null:e.data?.access_token??e.data?.token??e.token??e.accessToken??null}(t);if(400===t.status)return L(t.err||"Invalid request. Redirecting to home..."),P(!1),void j(!0);if(t.err||!n){L(String(t.err||"Failed to get token")),T(null),W(null),B(null),K(0);try{"undefined"!=typeof localStorage&&(localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x))}catch(e){}}else{const e=function(e){if(!e?.data)return null;const t=e.data.doctor_id??e.data.doctorId??null;return console.log(t,"extractDoctorIdFromLoginResponse -> id"),null!=t?String(t):null}(t);console.log(e,"extractDoctorIdFromLoginResponse -> doctorId");const o=function(e){if(!e?.data)return null;const t=e.data.name??e.data.doctor_name??e.data.userName??null;return null!=t?String(t):null}(t);T(n),W(e),B(o),L(null),j(!1),K(0);try{"undefined"!=typeof localStorage&&(localStorage.setItem(m,n),e&&localStorage.setItem(g,e),o&&localStorage.setItem(x,o))}catch(e){}}})).catch((t=>{e||(L(t?.message||"Authentication failed. Please try again."),T(null))})).finally((()=>{e||P(!1)})),()=>{e=!0}}),[F,v,D,z,Y,M]),t.useEffect((()=>{Ze(1),Ne(null)}),[V,de,at,lt,Ee,xe]),t.useEffect((()=>{!H&&M&&ht()}),[ht,M,H]),t.useEffect((()=>{const e=document.createElement("link");e.href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap",e.rel="stylesheet",document.head.appendChild(e);const t=document.createElement("style");t.innerHTML="\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @media (max-width: 768px) {\n .appointments-grid {\n grid-template-columns: 1.5fr 1fr 0.8fr !important;\n }\n .appointments-header-grid {\n grid-template-columns: 1.5fr 1fr 0.8fr !important;\n }\n .hide-on-mobile {\n display: none !important;\n }\n }\n @media (max-width: 480px) {\n .appointments-header-grid {\n font-size: 10px !important;\n }\n .appointments-grid {\n font-size: 11px !important;\n }\n }\n ",document.head.appendChild(t);const n=()=>{ie(window.innerWidth<768)};return window.addEventListener("resize",n),()=>{document.head.removeChild(e),document.head.removeChild(t),window.removeEventListener("resize",n)}}),[]),t.useEffect((()=>{const e=e=>{!ue||e.target.closest("button")||e.target.closest('input[type="date"]')||fe(!1),me&&!e.target.closest("[data-appointment-type-picker]")&&ge(!1)};return document.addEventListener("click",e),()=>{document.removeEventListener("click",e)}}),[ue,me]);let kt='"Nunito", serif';const It=Q||!M&&(!D||!z);let Dt;return Dt=H&&D&&z?a.default.createElement("div",{className:E,[w]:"teleconsult-appointments",style:{fontFamily:kt,background:"#F5F5F7",boxSizing:"border-box",height:"100%",minHeight:"100vh",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"24px"}},a.default.createElement("style",null,"@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }"),a.default.createElement("div",{style:{width:"40px",height:"40px",border:"3px solid #f3f3f3",borderTop:"3px solid #4C4DDC",borderRadius:"50%",animation:"spin 1s linear infinite",marginBottom:"16px"}}),a.default.createElement("p",{style:{fontSize:"14px",color:"#666",margin:0}},"Checking authorisation...")):a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{className:E,[w]:"teleconsult-appointments",style:{fontFamily:kt,background:"#F5F5F7",boxSizing:"border-box",height:"100%",minHeight:"100vh",width:"100%",display:"flex",flexDirection:"column",overflow:"hidden"}},a.default.createElement("div",{style:{background:"#FFFFFF",padding:le?"10px 12px":"12px 24px",display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:"1px solid #E5E5E5",flexWrap:"nowrap",gap:le?"8px":"0"}},a.default.createElement("div",{style:{position:"relative",width:le?"calc(100% - 90px)":"480px",maxWidth:le?"none":"480px"}},a.default.createElement("input",{type:"text",placeholder:"Search by patient name or ID",value:Ee,onChange:e=>we(e.target.value),style:{width:"100%",padding:le?"8px 32px 8px 10px":"8px 36px 8px 14px",border:"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"12px":"13px",fontFamily:kt,background:"#FFFFFF",outline:"none",boxSizing:"border-box"}}),Ee&&a.default.createElement("button",{onClick:()=>we(""),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"none",border:"none",cursor:"pointer",padding:"4px",display:"flex",alignItems:"center",justifyContent:"center",color:"#999",fontSize:"16px"},title:"Clear search"},"✕")),!1),a.default.createElement("div",{style:{padding:le?"12px":"16px 24px",flex:1,minHeight:0,overflow:"hidden",display:"flex",flexDirection:"column"}},a.default.createElement("div",{style:{marginBottom:le?"10px":"14px"}},a.default.createElement("h1",{style:{fontSize:le?"18px":"22px",fontWeight:700,color:"#1a1a1a",margin:"0 0 2px 0"}},"Tele Consultation"),a.default.createElement("p",{style:{fontSize:le?"11px":"12px",color:"#999",margin:0}},"Displaying All Tele Consultation Appointments")),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:le?"flex-start":"center",marginBottom:le?"10px":"14px",flexDirection:le?"column":"row",gap:le?"12px":"0"}},a.default.createElement("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",width:le?"100%":"auto"}},a.default.createElement("button",{onClick:()=>Z("upcoming"),style:{background:"upcoming"===V?"#4C4DDC":"#FFFFFF",padding:le?"8px 10px":"9px 16px",border:"upcoming"===V?"none":"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"10px":"13px",color:"upcoming"===V?"white":"#555555",fontWeight:600,fontFamily:kt,cursor:"pointer",flex:le?"1 1 auto":"none",minWidth:le?"0":"auto",transition:"all 0.3s ease",whiteSpace:"nowrap"}},"Upcoming Appointments"),a.default.createElement("button",{onClick:()=>Z("completed"),style:{background:"completed"===V?"#4C4DDC":"#FFFFFF",padding:le?"8px 10px":"9px 16px",border:"completed"===V?"none":"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"10px":"13px",color:"completed"===V?"white":"#555555",fontWeight:600,fontFamily:kt,cursor:"pointer",flex:le?"1 1 auto":"none",minWidth:le?"0":"auto",transition:"all 0.3s ease",whiteSpace:"nowrap"}},"Completed Appointments"),a.default.createElement("button",{onClick:()=>Z("cancelled"),style:{background:"cancelled"===V?"#4C4DDC":"#FFFFFF",padding:le?"8px 10px":"9px 16px",border:"cancelled"===V?"none":"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"10px":"13px",color:"cancelled"===V?"white":"#555555",fontWeight:600,fontFamily:kt,cursor:"pointer",flex:le?"1 1 auto":"none",minWidth:le?"0":"auto",transition:"all 0.3s ease",whiteSpace:"nowrap"}},"Cancelled Appointments")),a.default.createElement("div",{style:{display:"flex",gap:"8px",alignItems:"center",width:"auto",position:"relative",justifyContent:le?"flex-start":"flex-end",flexWrap:"wrap"}},a.default.createElement("button",{onClick:()=>{ue||(st(at),pt(lt),pe(de)),fe(!ue)},style:{padding:"8px 12px",fontFamily:kt,fontWeight:600,border:"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"11px":"13px",color:"#1a1a1a",background:"#FFFFFF",display:"flex",alignItems:"center",gap:le?"4px":"6px",cursor:"pointer",flex:"none",minWidth:le?"100px":"auto",justifyContent:"center"}},a.default.createElement("svg",{width:le?"12":"14",height:le?"12":"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a.default.createElement("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),a.default.createElement("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),a.default.createElement("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),a.default.createElement("line",{x1:"3",y1:"10",x2:"21",y2:"10"})),a.default.createElement("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},(()=>{switch(de){case"today":default:return"Today";case"tomorrow":return"Tomorrow";case"currentWeek":return"Current Week";case"thisMonth":return"This Month";case"currentYear":return"Current Year";case"custom":return le?"Custom":`${at} to ${lt}`}})()),a.default.createElement("svg",{width:le?"8":"10",height:le?"8":"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a.default.createElement("polyline",{points:"6 9 12 15 18 9"}))),ue&&a.default.createElement("div",{style:{position:"absolute",top:"100%",right:le?"auto":0,left:le?0:"auto",marginTop:"4px",background:"#FFFFFF",border:"1px solid #E5E5E5",borderRadius:"8px",boxShadow:"0 4px 16px rgba(0,0,0,0.15)",padding:"8px",zIndex:1e3,minWidth:le?"280px":"240px",width:le?"calc(100vw - 24px)":"auto",maxWidth:le?"calc(100vw - 24px)":"280px"}},a.default.createElement("div",{style:{marginBottom:"custom"===ce?"12px":"0"}},["thisMonth","today","tomorrow","currentWeek","currentYear","custom"].map((e=>a.default.createElement("button",{key:e,onClick:()=>{if(pe(e),"custom"!==e){const t=(e=>{const t=new Date;let n,o;switch(e){case"today":default:n=o=G();break;case"tomorrow":const e=new Date(t);e.setDate(e.getDate()+1),n=o=X(e);break;case"currentWeek":const a=new Date(t),r=new Date(t),l=t.getDay(),i=0===l?-6:1-l;a.setDate(t.getDate()+i),r.setDate(a.getDate()+6),n=X(a),o=X(r);break;case"thisMonth":const d=new Date(t.getFullYear(),t.getMonth(),1),s=new Date(t.getFullYear(),t.getMonth()+1,0);n=X(d),o=X(s);break;case"currentYear":n=`${t.getFullYear()}-01-01`,o=`${t.getFullYear()}-12-31`}return{from:n,to:o}})(e);se(e),rt(t.from),it(t.to),st(t.from),pt(t.to),fe(!1)}else st(""),pt("")},style:{width:"100%",padding:"10px 12px",background:ce===e?"#E8EEF4":"#FFFFFF",border:"none",borderRadius:"4px",fontSize:"13px",fontFamily:kt,cursor:"pointer",textAlign:"left",fontWeight:ce===e?600:400,color:ce===e?"#4C4DDC":"#1a1a1a",marginBottom:"4px",display:"flex",justifyContent:"space-between",alignItems:"center",transition:"all 0.2s ease"},onMouseEnter:t=>{ce!==e&&(t.target.style.background="#F5F5F5")},onMouseLeave:t=>{ce!==e&&(t.target.style.background="#FFFFFF")}},a.default.createElement("span",null,{thisMonth:"This Month",today:"Today",tomorrow:"Tomorrow",currentWeek:"Current Week",currentYear:"Current Year",custom:"Custom"}[e]),ce===e&&a.default.createElement("span",{style:{color:"#4C4DDC",fontSize:"16px"}},"✓"))))),"custom"===ce&&a.default.createElement("div",{style:{paddingTop:"8px",borderTop:"1px solid #E5E5E5"}},a.default.createElement("div",{style:{marginBottom:"8px"}},a.default.createElement("input",{type:"date",value:dt,onChange:e=>st(e.target.value),placeholder:"Start Date",style:{width:"100%",padding:"10px 8px",border:"1px solid #E5E5E5",borderRadius:"4px",fontSize:"13px",fontFamily:kt,boxSizing:"border-box",cursor:"pointer"}})),a.default.createElement("div",{style:{marginBottom:"12px"}},a.default.createElement("input",{type:"date",value:ct,onChange:e=>pt(e.target.value),placeholder:"End Date",style:{width:"100%",padding:"10px 8px",border:"1px solid #E5E5E5",borderRadius:"4px",fontSize:"13px",fontFamily:kt,boxSizing:"border-box",cursor:"pointer"}})),a.default.createElement("div",{style:{display:"flex",gap:"8px"}},a.default.createElement("button",{onClick:()=>{pe(de),st(at),pt(lt),fe(!1)},style:{flex:1,padding:"10px 12px",background:"#FFFFFF",color:"#4C4DDC",border:"1px solid #4C4DDC",borderRadius:"4px",fontSize:"13px",fontFamily:kt,fontWeight:600,cursor:"pointer"}},"Cancel"),a.default.createElement("button",{onClick:()=>{dt&&ct&&(se("custom"),rt(dt),it(ct),fe(!1))},style:{flex:1,padding:"10px 12px",background:"#4C4DDC",color:"#FFFFFF",border:"none",borderRadius:"4px",fontSize:"13px",fontFamily:kt,fontWeight:600,cursor:"pointer"}},"Submit")))))),a.default.createElement("div",{style:{display:"flex",flexDirection:le?"column":"row",gap:le?"12px":"14px",flex:1,minHeight:0,overflow:le?"auto":"hidden"}},a.default.createElement("div",{style:{flex:le?"none":"1 1 65%",width:le?"100%":"auto",display:"flex",flexDirection:"column",minHeight:le?"400px":0,maxHeight:le?"none":"100%",overflow:"hidden"}},a.default.createElement("div",{style:{background:"#FFFFFF",borderRadius:"8px",boxShadow:"0 1px 4px rgba(0,0,0,0.08)",overflow:"hidden",display:"flex",flexDirection:"column",flex:le?"none":1,minHeight:le?"auto":0,maxHeight:le?"none":"100%"}},a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:le?"12px 14px":"14px 18px",borderBottom:"1px solid #F1F1F1"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:le?"6px":"8px"}},a.default.createElement("span",{style:{fontSize:le?"14px":"15px",fontWeight:700,color:"#1a1a1a"}},"Appointments"),a.default.createElement("span",{style:{background:"#4C4DDC",color:"#fff",fontSize:le?"10px":"11px",fontWeight:600,padding:le?"2px 7px":"3px 8px",borderRadius:"12px"}},ot))),a.default.createElement("div",{className:"appointments-header-grid",style:{display:"grid",gridTemplateColumns:le?"1.5fr 1fr 0.8fr":"2.5fr 1fr 1.5fr 0.8fr 1.2fr",gap:le?"8px":"12px",padding:le?"8px 12px":"10px 18px",background:"#F5F5F5",fontSize:le?"10px":"12px",fontWeight:600,color:"#666"}},a.default.createElement("div",null,"Patients name"),!le&&a.default.createElement("div",null,"Patient ID"),a.default.createElement("div",{onClick:xt,style:{display:"flex",alignItems:"center",gap:"3px",cursor:"pointer",userSelect:"none"}},"Date",a.default.createElement("span",{style:{opacity:.7,fontSize:"10px"}},"asc"===ye?"▲":"▼")),!le&&a.default.createElement("div",null,"Slot"),!le&&a.default.createElement("div",null,"Doctor")),a.default.createElement("div",{style:{overflowY:"auto",overflowX:"hidden",flex:1,minHeight:0,maxHeight:le?"none":"430px",WebkitOverflowScrolling:"touch"}},H?a.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",padding:"40px",color:"#888"}},a.default.createElement("div",{style:{textAlign:"center"}},a.default.createElement("div",{style:{width:"40px",height:"40px",border:"3px solid #f3f3f3",borderTop:"3px solid #4C4DDC",borderRadius:"50%",animation:"spin 1s linear infinite",margin:"0 auto 10px"}}),"Getting token...")):ne?a.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",padding:"40px",color:"#888"}},a.default.createElement("div",{style:{textAlign:"center"}},a.default.createElement("div",{style:{width:"40px",height:"40px",border:"3px solid #f3f3f3",borderTop:"3px solid #4C4DDC",borderRadius:"50%",animation:"spin 1s linear infinite",margin:"0 auto 10px"}}),"Loading appointments...")):ae?a.default.createElement("div",{style:{padding:"40px",textAlign:"center",color:"#FF0000"}},a.default.createElement("div",{style:{fontSize:"16px",marginBottom:"8px"}},"⚠️ Error"),a.default.createElement("div",{style:{fontSize:"13px"}},ae),a.default.createElement("button",{onClick:ht,style:{marginTop:"16px",padding:"8px 16px",background:"#4C4DDC",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontFamily:kt}},"Retry")):0===tt.length?a.default.createElement("div",{style:{padding:"40px",textAlign:"center",color:"#888"}},a.default.createElement("div",{style:{fontSize:"16px",marginBottom:"8px"}},"📋"),a.default.createElement("div",{style:{fontSize:"13px"}},Ee?`No appointments found for "${Ee}"`:"No appointments found"),Ee&&a.default.createElement("button",{onClick:()=>we(""),style:{marginTop:"12px",padding:"6px 12px",background:"#4C4DDC",color:"white",border:"none",borderRadius:"4px",cursor:"pointer",fontSize:"12px",fontFamily:kt}},"Clear Search")):tt.map((e=>a.default.createElement("div",{key:ut(e),role:"button",tabIndex:0,onClick:()=>yt(e),onKeyDown:t=>"Enter"===t.key&&yt(e),className:"appointments-grid",style:{display:"grid",gridTemplateColumns:le?"1.5fr 1fr 0.8fr":"2.5fr 1fr 1.5fr 0.8fr 1.2fr",gap:le?"8px":"12px",padding:le?"10px 12px":"12px 18px",background:ut(ee)===ut(e)?"#E8EEF4":"#FFFFFF",borderTop:"1px solid #F1F1F1",alignItems:"center",cursor:"pointer",fontSize:le?"11px":"13px"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:le?"8px":"10px"}},ft(e)?a.default.createElement("img",{src:e.image,alt:"",style:{width:le?"32px":"36px",height:le?"32px":"36px",borderRadius:"50%",objectFit:"cover"}}):a.default.createElement("div",{style:{width:le?"32px":"36px",height:le?"32px":"36px",borderRadius:"50%",background:gt(e.patientName),display:"flex",alignItems:"center",justifyContent:"center",color:"#FFFFFF",fontWeight:600,fontSize:le?"14px":"16px"}},mt(e.patientName)),a.default.createElement("div",null,a.default.createElement("div",{style:{fontWeight:600,color:"#1a1a1a",fontSize:le?"11px":"13px"}},e.patientName),a.default.createElement("div",{style:{fontSize:le?"9px":"11px",color:"#888"}},e.email))),!le&&a.default.createElement("div",{style:{color:"#555",fontSize:"12px"}},e.patientId),a.default.createElement("div",{style:{color:"#555",fontSize:le?"10px":"12px"}},(()=>{const t=e.appointmentDate||"",n=t.match(/\s(\d{1,2}:\d{2}(?:\s*(?:AM|PM))?)$/i);return n?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",null,t.slice(0,n.index).trim()),a.default.createElement("div",{style:{fontSize:le?"9px":"11px",color:"#888"}},n[1].trim())):a.default.createElement("div",null,t)})()),!le&&a.default.createElement("div",{style:{color:"#555",fontSize:"12px"}},e.appointmentTime||"-"),!le&&a.default.createElement("div",{style:{color:"#555",fontSize:"12px"}},e.doctorName||e.doctor||"-"))))),!ne&&!ae&&tt.length>0&&a.default.createElement("div",{style:{padding:le?"12px 14px":"14px 18px",borderTop:"1px solid #F1F1F1",display:"flex",justifyContent:"space-between",alignItems:"center",background:"#FFFFFF",flexWrap:le?"wrap":"nowrap",gap:le?"10px":"0"}},a.default.createElement("div",{style:{fontSize:le?"11px":"12px",color:"#666"}},"Showing page ",Ve," of ",nt," (",ot," total)"),a.default.createElement("div",{style:{display:"flex",gap:"6px",alignItems:"center"}},a.default.createElement("button",{onClick:()=>Ze((e=>Math.max(1,e-1))),disabled:1===Ve,style:{padding:le?"6px 10px":"6px 12px",border:"1px solid #E5E5E5",borderRadius:"4px",background:1===Ve?"#F5F5F5":"#FFFFFF",color:1===Ve?"#999":"#1a1a1a",fontSize:le?"11px":"12px",fontFamily:kt,fontWeight:600,cursor:1===Ve?"not-allowed":"pointer",opacity:1===Ve?.5:1}},"Previous"),a.default.createElement("div",{style:{display:"flex",gap:"4px"}},[...Array(Math.min(5,nt))].map(((e,t)=>{let n;return n=nt<=5||Ve<=3?t+1:Ve>=nt-2?nt-4+t:Ve-2+t,a.default.createElement("button",{key:n,onClick:()=>Ze(n),style:{padding:le?"6px 10px":"6px 12px",border:Ve===n?"none":"1px solid #E5E5E5",borderRadius:"4px",background:Ve===n?"#4C4DDC":"#FFFFFF",color:Ve===n?"#FFFFFF":"#1a1a1a",fontSize:le?"11px":"12px",fontFamily:kt,fontWeight:600,cursor:"pointer",minWidth:le?"32px":"36px"}},n)}))),a.default.createElement("button",{onClick:()=>Ze((e=>Math.min(nt,e+1))),disabled:Ve===nt,style:{padding:le?"6px 10px":"6px 12px",border:"1px solid #E5E5E5",borderRadius:"4px",background:Ve===nt?"#F5F5F5":"#FFFFFF",color:Ve===nt?"#999":"#1a1a1a",fontSize:le?"11px":"12px",fontFamily:kt,fontWeight:600,cursor:Ve===nt?"not-allowed":"pointer",opacity:Ve===nt?.5:1}},"Next"))))),a.default.createElement("div",{style:{flex:le?"none":"1 1 35%",width:le?"100%":"auto",display:ee||!le?"flex":"none",flexDirection:"column",minHeight:le?"auto":0}},a.default.createElement("div",{style:{border:"1px solid #E5E5E5",borderRadius:"8px",overflow:"hidden",background:"#FFFFFF",boxShadow:"0 1px 4px rgba(0,0,0,0.08)",display:"flex",flexDirection:"column",flex:le?"none":1,minHeight:le?"auto":0}},ee?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:le?"12px 14px":"16px 18px",background:"#E8EEF4",borderBottom:"1px solid #E5E5E5"}},a.default.createElement("div",null,a.default.createElement("div",{style:{color:"#002668",fontSize:le?"14px":"16px",fontWeight:"700"}},ee.patientName||"N/A"),a.default.createElement("div",{style:{color:"#002668",fontSize:le?"11px":"13px"}},ee.patientId||ee.mrn||"N/A")),a.default.createElement("div",null,ft(ee)?a.default.createElement("img",{style:{width:le?"36px":"44px",height:le?"36px":"44px",borderRadius:"50%",objectFit:"cover"},src:ee.image,alt:ee.patientName}):a.default.createElement("div",{style:{width:le?"36px":"44px",height:le?"36px":"44px",borderRadius:"50%",background:gt(ee.patientName),display:"flex",alignItems:"center",justifyContent:"center",color:"#FFFFFF",fontWeight:700,fontSize:le?"16px":"20px"}},mt(ee.patientName)))),a.default.createElement("div",{style:{padding:le?"12px 14px":"14px 18px",gap:le?"10px":"12px",display:"flex",flexDirection:"column",background:"white",overflow:"auto",flex:1,position:"relative"}},a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Speciality"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.specialisation||ee?.speciality||"N/A")),a.default.createElement("div",{style:{textAlign:"right"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Appointment Type"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.type||ee?.appointmentType||"Online"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Appointment Date"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.date||ee?.appointmentDate||"N/A")),a.default.createElement("div",{style:{textAlign:"right"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Appointment Time"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.time||ee?.appointmentTime||"N/A"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Doctor"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.doctor||ee?.doctorName||"N/A"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Hospital"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.hospital||ee?.hospitalName||"N/A"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Reason for Appointment"),a.default.createElement("div",{style:{fontWeight:"600",fontSize:le?"11px":"12px",lineHeight:"1.4"}},ee?.reason||ee?.reasonForAppointment||"No reason provided"))),("upcoming"===V||"completed"===V&&(e=>{const t=e?.date||e?.appointmentDate,n=e?.time||e?.appointmentTime;if(!t||!n)return!1;try{const e=String(n).trim().match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);let o,a;if(e){o=parseInt(e[1],10),a=parseInt(e[2],10);const t=e[3].toUpperCase();"AM"===t&&12===o&&(o=0),"PM"===t&&12!==o&&(o+=12)}else{const e=String(n).trim().split(":");o=parseInt(e[0],10),a=parseInt(e[1],10)}if(isNaN(o)||isNaN(a))return!1;const r=new Date(`${t} ${String(o).padStart(2,"0")}:${String(a).padStart(2,"0")}:00`);if(isNaN(r.getTime()))return!1;const l=new Date(r.getTime()+72e5);return new Date<=l}catch{return!1}})(ee))&&a.default.createElement("div",{style:{display:"flex",flexDirection:le?"column":"row",gap:"6px",marginTop:"10px"}},a.default.createElement("button",{type:"button",onClick:Te?void 0:bt,disabled:Te,style:{flex:1,background:Te?"#99e4e8":"#1CC3CE",color:"#FFFFFF",border:"1px solid #1CC3CE",borderRadius:"6px",padding:le?"10px 8px":"8px 6px",fontFamily:kt,fontWeight:600,fontSize:le?"11px":"12px",cursor:Te?"not-allowed":"pointer"}},Te?"Connecting...":"Join Call >")),("upcoming"===V||"completed"===V)&&We&&a.default.createElement("div",{style:{fontSize:"11px",color:"#e53935",marginTop:"6px",textAlign:"center",width:"100%"}},"⚠️ ",We))):a.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",padding:"40px",color:"#888",textAlign:"center"}},a.default.createElement("div",null,a.default.createElement("div",{style:{fontSize:"16px",marginBottom:"8px"}},"📋"),a.default.createElement("div",{style:{fontSize:"13px"}},"Select an appointment to view details"))))))),Se&&a.default.createElement("div",{style:{position:"fixed",left:Ae?"0":le?"10px":`${Be.x}px`,top:Ae?"0":le?"70px":`${Be.y}px`,right:Ae?"0":le?"10px":"auto",bottom:Ae?"0":"auto",width:Ae?"100vw":le?"calc(100vw - 20px)":ve?"350px":`${Pe.width}px`,height:Ae?"100vh":ve?"auto":le?"300px":`${Pe.height}px`,background:"#FFFFFF",borderRadius:Ae?"0":"8px",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",zIndex:1e5,overflow:"hidden",display:"flex",flexDirection:"column",transition:Le||Ke?"none":"all 0.3s ease"}},a.default.createElement("div",{onPointerDown:le||Ae?void 0:Ft,onPointerMove:le||Ae?void 0:vt,onPointerUp:le||Ae?void 0:Ct,onPointerCancel:le||Ae?void 0:Ct,style:{background:"linear-gradient(135deg, #4C4DDC 0%, #3A3BBD 100%)",color:"#FFFFFF",padding:le?"8px 10px":"10px 12px",display:"flex",justifyContent:"space-between",alignItems:"center",cursor:le||Ae?"default":"move",userSelect:"none"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:le?"6px":"8px",flex:1,minWidth:0}},a.default.createElement("div",{style:{width:le?"6px":"8px",height:le?"6px":"8px",borderRadius:"50%",background:"#FF4444",animation:"pulse 2s infinite",flexShrink:0}}),a.default.createElement("span",{style:{fontSize:le?"11px":"13px",fontWeight:600,fontFamily:kt,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},"Video Call - ",ee?.patientName||"Patient")),a.default.createElement("div",{style:{display:"flex",gap:le?"4px":"6px",alignItems:"center",flexShrink:0}},a.default.createElement("button",{onClick:wt,style:{background:"rgba(255, 255, 255, 0.2)",border:"1px solid rgba(255, 255, 255, 0.3)",borderRadius:"6px",color:"#FFFFFF",cursor:"pointer",padding:le?"5px 8px":"6px 10px",lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",minWidth:le?"28px":"32px",height:le?"28px":"32px",transition:"background 0.2s ease"},onMouseEnter:e=>e.target.style.background="rgba(255, 255, 255, 0.3)",onMouseLeave:e=>e.target.style.background="rgba(255, 255, 255, 0.2)",title:ve?"Restore":"Minimize"},ve?a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("rect",{x:"3",y:"3",width:"10",height:"10",stroke:"white",strokeWidth:"1.8",fill:"none"})):a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("line",{x1:"3",y1:"8",x2:"13",y2:"8",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round"}))),a.default.createElement("button",{onClick:St,style:{background:"rgba(255, 255, 255, 0.2)",border:"1px solid rgba(255, 255, 255, 0.3)",borderRadius:"6px",color:"#FFFFFF",cursor:"pointer",padding:le?"5px 8px":"6px 10px",lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",minWidth:le?"28px":"32px",height:le?"28px":"32px",transition:"background 0.2s ease"},onMouseEnter:e=>e.target.style.background="rgba(255, 255, 255, 0.3)",onMouseLeave:e=>e.target.style.background="rgba(255, 255, 255, 0.2)",title:Ae?"Exit Fullscreen":"Fullscreen"},Ae?a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("path",{d:"M10 3H13V6M6 13H3V10M13 10V13H10M3 6V3H6",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})):a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("path",{d:"M3 6V3H6M13 10V13H10M10 3H13V6M6 13H3V10",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"}))),a.default.createElement("button",{onClick:Et,style:{background:"rgba(255, 255, 255, 0.2)",border:"1px solid rgba(255, 255, 255, 0.3)",borderRadius:"6px",color:"#FFFFFF",cursor:"pointer",padding:le?"5px 8px":"6px 10px",lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",minWidth:le?"28px":"32px",height:le?"28px":"32px",fontWeight:"bold",fontSize:le?"18px":"22px",transition:"background 0.2s ease"},onMouseEnter:e=>e.target.style.background="rgba(255, 255, 255, 0.3)",onMouseLeave:e=>e.target.style.background="rgba(255, 255, 255, 0.2)",title:"Close"},"×"))),a.default.createElement("div",{style:{flex:1,background:"#000000",position:"relative",display:ve?"none":"flex",flexDirection:"column"}},a.default.createElement("iframe",{src:(()=>{if(!Ie)return"";return`${String(q||"")}${Ie}`})(),style:{width:"100%",height:"100%",border:"none",flex:1},allow:"camera; microphone; display-capture; autoplay",allowFullScreen:!0,title:"Video Call"})),!le&&!Ae&&!ve&&a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{onPointerDown:e=>At("top-left",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",left:0,top:0,width:"16px",height:"16px",cursor:"nwse-resize",background:"transparent",zIndex:10001}}),a.default.createElement("div",{onPointerDown:e=>At("top-right",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",right:0,top:0,width:"16px",height:"16px",cursor:"nesw-resize",background:"transparent",zIndex:10001}}),a.default.createElement("div",{onPointerDown:e=>At("bottom-left",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",left:0,bottom:0,width:"16px",height:"16px",cursor:"nesw-resize",background:"transparent",zIndex:10001}}),a.default.createElement("div",{onPointerDown:e=>At("bottom-right",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",right:0,bottom:0,width:"16px",height:"16px",cursor:"nwse-resize",background:"transparent",zIndex:10001}})),a.default.createElement("style",null,"\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n "))),It&&a.default.createElement("div",{style:{position:"fixed",inset:0,zIndex:1e5,display:"flex",alignItems:"center",justifyContent:"center",padding:"24px",background:"rgba(0,0,0,0.4)",boxSizing:"border-box"}},a.default.createElement("div",{style:{fontFamily:kt,maxWidth:"400px",width:"100%",padding:"32px 24px",background:"#FFFFFF",borderRadius:"12px",boxShadow:"0 8px 32px rgba(0,0,0,0.2)",textAlign:"center"}},a.default.createElement("div",{style:{fontSize:"48px",marginBottom:"16px"}},"🔒"),a.default.createElement("h2",{style:{fontSize:"20px",fontWeight:700,color:"#1a1a1a",margin:"0 0 8px 0"}},"Access Denied"),a.default.createElement("p",{style:{fontSize:"14px",color:"#666",margin:0,lineHeight:1.5}},"You do not have permission to access Afiya Pro. Please contact administrator for assistance.")))),a.default.createElement(S,null,Dt)},v=Object.freeze({ICD_ONLY:"ICD_ONLY",CLAUDE_ONLY:"CLAUDE_ONLY",AUTO:"AUTO"}),C=`${l}/insurance/api/icd/suggest`;async function A(e,t){if(!e||!e.trim())throw new Error("Query cannot be empty");const n=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e.trim(),mode:t})});if(!n.ok){const e=await n.json().catch((()=>({}))),t=e?.message||e?.error?.message||`API error: ${n.status} ${n.statusText}`;throw new Error(t)}const o=await n.json(),a=o?.data??o;if(Array.isArray(a?.matches))return{matches:a.matches,note:a.note||""};if(Array.isArray(a))return{matches:a,note:""};if(Array.isArray(a?.results))return{matches:a.results.map((e=>({code:e.code,description:e.description||e.name||"",reason:e.reason||""}))),note:a.note||""};throw new Error("Unexpected response format from ICD suggest API")}const k="data:image/png;base64,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",I="💡",D="🕐",z="⚕️",M='"Nunito", sans-serif',T={primary:"#4C4DDC",primaryDark:"#3A3BBD",primaryLight:"#E8EEF4",teal:"#1CC3CE",tealLight:"#E0F8F9",success:"#16a34a",successLight:"#dcfce7",error:"#dc2626",errorLight:"#fee2e2",warn:"#d97706",warnLight:"#fef3c7",text:"#1a1a1a",muted:"#666",border:"#E5E5E5",bg:"#F5F5F7",white:"#FFFFFF"};function R(e){let{children:t,color:n=T.primary,bg:o=T.primaryLight}=e;return a.default.createElement("span",{style:{display:"inline-flex",alignItems:"center",padding:"2px 10px",borderRadius:"999px",fontSize:"12px",fontWeight:700,color:n,background:o,letterSpacing:"0.5px"}},t)}function W(){return a.default.createElement(a.default.Fragment,null,a.default.createElement("style",null,"@keyframes icd-spin{to{transform:rotate(360deg)}}"),a.default.createElement("div",{style:{width:20,height:20,border:"2.5px solid #d1d5db",borderTop:`2.5px solid ${T.primary}`,borderRadius:"50%",animation:"icd-spin 0.8s linear infinite",flexShrink:0}}))}function N(e){let{text:t,label:n="Copy",copyKey:o,copiedKey:r,copy:l}=e;const i=r===o;return a.default.createElement("button",{onClick:()=>l(t,o),title:i?"Copied!":`Copy ${n}`,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 10px",fontSize:11,fontWeight:600,fontFamily:M,border:`1px solid ${i?T.success:T.border}`,borderRadius:5,background:i?T.successLight:T.white,color:i?T.success:T.muted,cursor:"pointer",transition:"all 0.15s ease",whiteSpace:"nowrap"}},i?"✓ Copied":`⎘ ${n}`)}function B(e){let{match:t,index:n,copy:o,copiedKey:r}=e;const l=`card-${n}`,i=`${t.code} — ${t.description}${t.reason?`\nNote: ${t.reason}`:""}`;return a.default.createElement("div",{style:{border:`1px solid ${T.border}`,borderRadius:10,padding:"14px 16px",background:T.white,display:"flex",flexDirection:"column",gap:6,boxShadow:"0 1px 4px rgba(0,0,0,0.06)"}},a.default.createElement("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:8}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"}},a.default.createElement(R,{color:T.primary,bg:T.primaryLight},t.code),a.default.createElement("span",{style:{fontSize:13,fontWeight:600,color:T.text,lineHeight:1.4}},t.description)),a.default.createElement(N,{text:i,label:t.code,copyKey:l,copiedKey:r,copy:o})),t.reason&&a.default.createElement("p",{style:{margin:0,fontSize:12,color:T.muted,lineHeight:1.5,paddingLeft:2}},I," ",t.reason))}function H(e){let{item:t,onClick:n}=e;return a.default.createElement("button",{onClick:()=>n(t.query),title:`Re-run: ${t.query}`,style:{padding:"4px 10px",border:`1px solid ${T.border}`,borderRadius:999,fontSize:11,fontFamily:M,color:T.muted,background:T.white,cursor:"pointer",maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",transition:"border-color 0.15s"},onMouseEnter:e=>e.currentTarget.style.borderColor=T.primary,onMouseLeave:e=>e.currentTarget.style.borderColor=T.border},D," ",t.query)}function P(e){let{mode:t,onChange:n}=e;const o=(e,o,r)=>a.default.createElement("button",{onClick:()=>n(e),style:{flex:1,padding:"6px 0",border:"none",borderRadius:6,fontSize:12,fontWeight:700,fontFamily:M,cursor:"pointer",transition:"all 0.15s",background:t===e?T.white:"transparent",color:t===e?T.primary:"rgba(255,255,255,0.7)",boxShadow:t===e?"0 1px 4px rgba(0,0,0,0.15)":"none",display:"flex",alignItems:"center",justifyContent:"center",gap:5}},a.default.createElement("span",null,r)," ",o);return a.default.createElement("div",{style:{display:"flex",background:"rgba(255,255,255,0.15)",borderRadius:8,padding:3,gap:2,marginTop:10}},o("nlm","Quick Lookup",""),o("ai","AI Suggest",""))}function Q(e){let{panelRef:n,onClose:o,mode:r,onModeChange:l}=e;const[i,d]=t.useState(""),[s,c]=t.useState([]),[p,u]=t.useState(""),[f,m]=t.useState(""),g=t.useRef(null),x=t.useRef(null);t.useEffect((()=>{setTimeout((()=>x.current?.focus()),80)}),[]);const h=t.useCallback((async e=>{if(e.length<2)return c([]),void u("");u("Searching…");try{const t=((await A(e,v.ICD_ONLY)).matches||[]).map((e=>[e.code,e.description]));c(t),u(0===t.length?"No matching codes found.":`Showing ${t.length} result${1!==t.length?"s":""}`)}catch(e){u(e.message||"Could not fetch results. Check your connection."),c([])}}),[]);return a.default.createElement("div",{ref:n,style:{position:"fixed",bottom:28,right:28,zIndex:99999,width:"min(480px, calc(100vw - 32px))",maxHeight:"calc(100vh - 56px)",display:"flex",flexDirection:"column",background:T.white,borderRadius:16,boxShadow:"0 12px 48px rgba(0,0,0,0.18)",fontFamily:M,overflow:"hidden",animation:"icd-slide-in 0.2s ease"}},a.default.createElement("style",null,"@keyframes icd-slide-in{from{opacity:0;transform:translateY(20px) scale(0.97)}to{opacity:1;transform:translateY(0) scale(1)}}"),a.default.createElement("div",{style:{background:`linear-gradient(135deg, ${T.primary} 0%, ${T.teal} 100%)`,padding:"14px 18px",flexShrink:0}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},a.default.createElement("img",{src:k,alt:"ICD-10",style:{width:32,height:32,objectFit:"contain"}}),a.default.createElement("div",null,a.default.createElement("div",{style:{color:T.white,fontWeight:700,fontSize:15,lineHeight:1.2}},"ICD-10 Coding Assistant"),a.default.createElement("div",{style:{color:"rgba(255,255,255,0.75)",fontSize:11}},"Quick ICD-10 lookup"))),a.default.createElement("button",{onClick:o,style:{background:"rgba(255,255,255,0.2)",border:"1px solid rgba(255,255,255,0.3)",borderRadius:8,color:T.white,cursor:"pointer",fontSize:18,fontWeight:"bold",width:32,height:32,display:"flex",alignItems:"center",justifyContent:"center"}},"×")),a.default.createElement(P,{mode:r,onChange:l})),a.default.createElement("div",{style:{flex:1,overflowY:"auto",padding:"16px 18px",display:"flex",flexDirection:"column",gap:10}},a.default.createElement("input",{ref:x,type:"text",value:i,onChange:e=>{const t=e.target.value;d(t),clearTimeout(g.current),g.current=setTimeout((()=>h(t.trim())),300)},placeholder:"Type a diagnosis, e.g. diabetes, hypertension…",style:{width:"100%",padding:"10px 14px",fontSize:14,fontFamily:M,border:`1.5px solid ${T.border}`,borderRadius:8,outline:"none",boxSizing:"border-box",transition:"border-color 0.15s"},onFocus:e=>e.target.style.borderColor=T.primary,onBlur:e=>e.target.style.borderColor=T.border}),a.default.createElement("p",{style:{margin:0,fontSize:11,color:"#aaa",lineHeight:1.6,borderLeft:`3px solid ${T.border}`,paddingLeft:8}},a.default.createElement("strong",null,"Note:")," Use short, specific keywords for better results, or try"," ",a.default.createElement("button",{onClick:()=>l("ai"),style:{background:"none",border:"none",padding:0,color:T.primary,fontWeight:700,fontSize:11,cursor:"pointer",textDecoration:"underline",fontFamily:M}},"AI Suggest")," ","for broader symptom-based recommendations."),p&&s.length>0&&a.default.createElement("p",{style:{margin:0,fontSize:12,color:T.muted}},p),"No matching codes found."===p&&0===s.length&&a.default.createElement("div",{style:{background:T.warnLight,border:"1px solid #fcd34d",borderRadius:10,padding:"14px 16px",display:"flex",gap:10,alignItems:"flex-start"}},a.default.createElement("span",{style:{fontSize:18,flexShrink:0}},"🔍"),a.default.createElement("div",null,a.default.createElement("p",{style:{margin:"0 0 4px",fontSize:13,fontWeight:700,color:T.warn}},"No results found"),a.default.createElement("p",{style:{margin:0,fontSize:12,color:T.warn,lineHeight:1.6}},"We couldn't find a match. Try using more accurate keywords or switch to"," ",a.default.createElement("button",{onClick:()=>l("ai"),style:{background:"none",border:"none",padding:0,color:T.primary,fontWeight:700,fontSize:12,cursor:"pointer",textDecoration:"underline",fontFamily:M}},"AI Suggest")," ","for better results."))),a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},s.map((e=>{let[t,n]=e;return a.default.createElement("div",{key:t,onClick:()=>(e=>{navigator.clipboard.writeText(e).then((()=>{m(e),setTimeout((()=>m("")),2e3)}))})(t),style:{display:"flex",alignItems:"center",gap:12,padding:"10px 14px",border:`1px solid ${T.border}`,borderRadius:8,cursor:"pointer",background:T.white,transition:"background 0.1s"},onMouseEnter:e=>e.currentTarget.style.background=T.bg,onMouseLeave:e=>e.currentTarget.style.background=T.white},a.default.createElement("span",{style:{fontFamily:"monospace",fontSize:12,background:T.primaryLight,color:T.primary,padding:"3px 8px",borderRadius:6,whiteSpace:"nowrap",fontWeight:700}},t),a.default.createElement("span",{style:{fontSize:13,flex:1,color:T.text}},n),a.default.createElement("span",{style:{fontSize:11,color:f===t?T.success:T.muted,fontWeight:f===t?700:400}},f===t?"✓ copied":"copy"))})))),a.default.createElement("div",{style:{flexShrink:0,padding:"10px 18px",borderTop:`1px solid ${T.border}`,background:T.bg,fontSize:11,color:"#aaa",textAlign:"center"}},z," For reference only. Always verify codes with a certified medical coder."))}function L(e){let{onOpen:t}=e;return a.default.createElement("button",{onClick:t,title:"ICD-10 Coding Assistant",style:{position:"fixed",bottom:28,right:28,zIndex:99998,display:"flex",alignItems:"center",gap:8,padding:"10px 18px",borderRadius:999,border:"none",background:`linear-gradient(135deg, ${T.primary} 0%, ${T.teal} 100%)`,color:T.white,fontFamily:M,fontWeight:700,fontSize:13,cursor:"pointer",boxShadow:"0 4px 16px rgba(76,77,220,0.35)",transition:"transform 0.15s ease, box-shadow 0.15s ease"},onMouseEnter:e=>{e.currentTarget.style.transform="translateY(-2px)",e.currentTarget.style.boxShadow="0 8px 24px rgba(76,77,220,0.4)"},onMouseLeave:e=>{e.currentTarget.style.transform="translateY(0)",e.currentTarget.style.boxShadow="0 4px 16px rgba(76,77,220,0.35)"}},a.default.createElement("img",{src:k,alt:"ICD-10",style:{width:22,height:22,objectFit:"contain"}}),"ICD-10 Assistant")}function U(e){let{panelRef:t,textareaRef:n,query:o,loading:r,result:l,error:i,history:d,copy:s,copiedKey:c,onQueryChange:p,onKeyDown:u,onSubmit:f,onClear:m,onClose:g,onHistoryClick:x,mode:h,onModeChange:y}=e;const b=l?.matches?.map((e=>`${e.code} — ${e.description}`)).join("\n")||"";return a.default.createElement("div",{style:{position:"fixed",bottom:28,right:28,zIndex:99999,width:"min(480px, calc(100vw - 32px))",maxHeight:"calc(100vh - 56px)",display:"flex",flexDirection:"column",background:T.white,borderRadius:16,boxShadow:"0 12px 48px rgba(0,0,0,0.18)",fontFamily:M,overflow:"hidden",animation:"icd-slide-in 0.2s ease"},ref:t},a.default.createElement("style",null,"\n @keyframes icd-slide-in {\n from { opacity: 0; transform: translateY(20px) scale(0.97); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n "),a.default.createElement("div",{style:{background:`linear-gradient(135deg, ${T.primary} 0%, ${T.teal} 100%)`,padding:"14px 18px",flexShrink:0}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},a.default.createElement("img",{src:k,alt:"ICD-10",style:{width:32,height:32,objectFit:"contain"}}),a.default.createElement("div",null,a.default.createElement("div",{style:{color:T.white,fontWeight:700,fontSize:15,lineHeight:1.2}},"ICD-10 Coding Assistant"),a.default.createElement("div",{style:{color:"rgba(255,255,255,0.75)",fontSize:11}},"AI-powered · Medical coding helper"))),a.default.createElement("button",{onClick:g,style:{background:"rgba(255,255,255,0.2)",border:"1px solid rgba(255,255,255,0.3)",borderRadius:8,color:T.white,cursor:"pointer",fontSize:18,fontWeight:"bold",width:32,height:32,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0}},"×")),a.default.createElement(P,{mode:h,onChange:y})),a.default.createElement("div",{style:{overflowY:"auto",flex:1,padding:"18px 18px 0",display:"flex",flexDirection:"column",gap:14}},a.default.createElement("p",{style:{margin:0,fontSize:13,color:T.muted,lineHeight:1.6}},"Describe a diagnosis, condition, or procedure in plain language and get relevant ICD-10 code suggestions for insurance and billing."),a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},a.default.createElement("label",{style:{fontSize:12,fontWeight:600,color:T.text},htmlFor:"icd10-query"},"Diagnosis / Condition / Procedure"),a.default.createElement("textarea",{id:"icd10-query",ref:n,value:o,onChange:p,onKeyDown:u,placeholder:"e.g. Type 2 diabetes with hypertension, chest pain on exertion, rotator cuff repair…",rows:3,style:{width:"100%",padding:"10px 12px",border:`1.5px solid ${T.border}`,borderRadius:8,fontSize:13,fontFamily:M,color:T.text,resize:"vertical",outline:"none",boxSizing:"border-box",lineHeight:1.5,transition:"border-color 0.15s"},onFocus:e=>e.target.style.borderColor=T.primary,onBlur:e=>e.target.style.borderColor=T.border}),a.default.createElement("div",{style:{fontSize:11,color:"#aaa",textAlign:"right"}},"Press ",a.default.createElement("kbd",{style:{background:"#f3f4f6",padding:"1px 5px",borderRadius:3,fontFamily:"monospace"}},"Enter")," to submit · ",a.default.createElement("kbd",{style:{background:"#f3f4f6",padding:"1px 5px",borderRadius:3,fontFamily:"monospace"}},"Shift+Enter")," for new line")),a.default.createElement("div",{style:{display:"flex",gap:8}},a.default.createElement("button",{onClick:f,disabled:!o.trim()||r,style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:8,padding:"10px 16px",background:!o.trim()||r?"#d1d5db":`linear-gradient(135deg, ${T.primary} 0%, ${T.primaryDark} 100%)`,color:T.white,border:"none",borderRadius:8,fontSize:13,fontWeight:700,fontFamily:M,cursor:!o.trim()||r?"not-allowed":"pointer",transition:"background 0.15s"}},r?a.default.createElement(a.default.Fragment,null,a.default.createElement(W,null),"Searching codes…"):"Find ICD-10 Codes"),(o||l)&&a.default.createElement("button",{onClick:m,style:{padding:"10px 14px",background:T.bg,border:`1px solid ${T.border}`,borderRadius:8,fontSize:13,fontWeight:600,fontFamily:M,color:T.muted,cursor:"pointer"}},"Clear")),i&&a.default.createElement("div",{style:{background:T.errorLight,border:"1px solid #fca5a5",borderRadius:8,padding:"10px 14px",fontSize:13,color:T.error,display:"flex",gap:8}},a.default.createElement("span",null,"⚠️"),a.default.createElement("span",null,i)),l&&a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:10}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},a.default.createElement("span",{style:{fontSize:13,fontWeight:700,color:T.text}},"Suggested Codes"),a.default.createElement(R,{color:T.teal,bg:T.tealLight},l.matches.length," match",1!==l.matches.length?"es":"")),l.matches.length>0&&a.default.createElement(N,{text:b,label:"All",copyKey:"copy-all",copiedKey:c,copy:s})),0===l.matches.length&&a.default.createElement("div",{style:{padding:"20px",textAlign:"center",color:T.muted,fontSize:13,background:T.bg,borderRadius:10}},"No matching ICD-10 codes found."),l.matches.map(((e,t)=>a.default.createElement(B,{key:t,index:t,match:e,copy:s,copiedKey:c})))),d.length>0&&a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},a.default.createElement("span",{style:{fontSize:11,fontWeight:600,color:"#aaa",textTransform:"uppercase",letterSpacing:"0.5px"}},"Recent searches"),a.default.createElement("div",{style:{display:"flex",gap:6,flexWrap:"wrap"}},d.map(((e,t)=>a.default.createElement(H,{key:t,item:e,onClick:x})))))),a.default.createElement("div",{style:{flexShrink:0,padding:"12px 18px",borderTop:`1px solid ${T.border}`,background:T.bg,fontSize:11,color:"#aaa",lineHeight:1.5,textAlign:"center"}},z," For reference only. Always verify codes with a certified medical coder. Not a substitute for clinical judgment or official coding guidelines."))}function j(){const[e,n]=t.useState(!1),[o,r]=t.useState("nlm"),[l,i]=t.useState(""),[d,s]=t.useState(!1),[c,p]=t.useState(null),[u,f]=t.useState(null),[m,g]=t.useState([]),x=t.useRef(null),h=t.useRef(null),{copy:y,copiedKey:b}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1800;const[n,o]=t.useState(null),a=t.useCallback((function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";if(navigator.clipboard)navigator.clipboard.writeText(t).then((()=>{o(n),setTimeout((()=>o(null)),e)}));else{const a=document.createElement("textarea");a.value=t,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),o(n),setTimeout((()=>o(null)),e)}}),[e]);return{copy:a,copiedKey:n}}();t.useEffect((()=>{e&&x.current&&setTimeout((()=>x.current?.focus()),80)}),[e]),t.useEffect((()=>{if(!e)return;const t=e=>{h.current&&!h.current.contains(e.target)&&n(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)}),[e]);const E=t.useCallback((async()=>{if(l.trim()&&!d){s(!0),f(null),p(null);try{const e=await A(l.trim(),v.CLAUDE_ONLY);p(e),g((t=>{const n=t.filter((e=>e.query.toLowerCase()!==l.trim().toLowerCase()));return[{query:l.trim(),matches:e.matches},...n].slice(0,3)}))}catch(e){f(e.message||"Something went wrong. Please try again.")}finally{s(!1)}}}),[l,d]),w=t.useCallback((e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),E())}),[E]),S=t.useCallback((()=>{i(""),p(null),f(null),x.current?.focus()}),[]),F=t.useCallback((e=>{i(e),p(null),f(null),x.current?.focus()}),[]),C=t.useCallback((e=>i(e.target.value)),[]);return a.default.createElement(a.default.Fragment,null,!e&&a.default.createElement(L,{onOpen:()=>n(!0)}),e&&"nlm"===o&&a.default.createElement(Q,{panelRef:h,onClose:()=>n(!1),mode:o,onModeChange:r}),e&&"ai"===o&&a.default.createElement(U,{panelRef:h,textareaRef:x,query:l,loading:d,result:c,error:u,history:m,copy:y,copiedKey:b,onQueryChange:C,onKeyDown:w,onSubmit:E,onClear:S,onClose:()=>n(!1),onHistoryClick:F,mode:o,onModeChange:r}))}let Y=null;const K={showWidget:(e,t)=>{Y||(Y=document.createElement("div"),document.body.appendChild(Y));const n=()=>a.default.createElement(a.default.Fragment,null,a.default.createElement(F,{config:e}),e.showIcdAssistant&&a.default.createElement(j,null));r.default.render(a.default.createElement(n,null),Y)},closePopup:()=>{Y&&(r.default.unmountComponentAtNode(Y),Y=null)}};window.BookingSDK=K,e.AppointmentPage=F,e.ICD10Assistant=j,e.PIH_APPOINTMENT_WIDGET_CLASS=E,e.default=K,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","react","react-dom"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MyPackage={},e.React,e.ReactDOM)}(this,(function(e,t,n){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(t),r=o(n);const l="https://afiyaapiqa.powermindinc.com",i="/appointment/V1/consultant/all-appointments",d="/notification/V1/consultation/online/initiate",s="https://ittisalqa.powermindinc.com/call?token=",c=async function(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=(e||"").toUpperCase();"INPROGRESS"===a&&(a="IN_PROGRESS"),"UPCOMING"===a&&(a="UPCOMING,RESCHEDULED");const r=o.apiBaseUrl,l=o.hospitalId,d=o.doctorId,s=o.token||"",c={hospitalId:l,doctorId:d,fromDate:t,toDate:n,statuses:a,appointmentType:"ONLINE"},p=`${r}${i}`,u=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const o=new URL(e);return o.search=new URLSearchParams(t).toString(),fetch(o,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`${n}`}}).then((async e=>{const t=await e.json().catch((()=>({})));return e.ok?t:{err:t?.resultInfo?.message||"Something went wrong!",status:e.status}})).catch((e=>(console.error("Fetch error:",e),{err:e?.message||String(e)||"Network error"})))}(p,c,"PIH-Appointment-Widget",s);return u},p=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};console.log("initiateConsultation -> config",t);const n=`${t.apiBaseUrl.replace(/\/$/,"")}${d}`,o=t.appToken||"";return async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4?arguments[4]:void 0;const a=new URL(e);Object.keys(n).forEach((e=>{a.searchParams.append(e,n[e])}));const r={"Content-Type":"application/json"};o&&(r.Authorization=o);const l={method:"POST",headers:r,body:JSON.stringify(t)};return fetch(a.toString(),l).then((async e=>{const t=await e.json().catch((()=>({})));return e.ok?t:{err:t?.resultInfo?.message||"Something went wrong!",status:e.status}})).catch((e=>(console.error("Fetch error:",e),{err:e.message||"Network error"})))}(n,{patientId:String(e.patientId||""),primaryPatientId:String(e.primaryPatientId||e.patientId||""),hospitalId:t.hospitalId,doctorId:String(t.doctorId),patientName:e.patientName||e.name||"",doctorName:e.doctorName||t.doctorName,appointmentId:String(e.id||e.appointmentId||e._id||"")},"PIH-Appointment-Widget",{},o)};const u="pih_appointment_idToken",f="pih_appointment_email",m="pih_appointment_appToken",g="pih_appointment_doctorId",x="pih_appointment_userName",h="pih_appointment_apiBaseUrl",y="pih_appointment_hospitalId",b=720,E="pih-appointment-widget",w="data-pih-widget";class S extends t.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){"undefined"!=typeof console&&console.error&&console.error("Appointment widget error:",e,t)}render(){return this.state.hasError?a.default.createElement("div",{className:E,[w]:"teleconsult-appointments",style:{fontFamily:'"Nunito", serif',background:"#F5F5F7",boxSizing:"border-box",minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",padding:"24px",textAlign:"center"}},a.default.createElement("div",{style:{maxWidth:"400px"}},a.default.createElement("div",{style:{fontSize:"48px",marginBottom:"16px"}},"⚠️"),a.default.createElement("h2",{style:{fontSize:"20px",fontWeight:700,color:"#1a1a1a",margin:"0 0 8px 0"}},"Something went wrong"),a.default.createElement("p",{style:{fontSize:"14px",color:"#666",margin:0,lineHeight:1.5}},"Please refresh the page or try again later."))):this.props.children}}const F=e=>{let{config:n={email:"gk.jayavenitha@powerholding.com",hospitalId:"dMtEGhak",apiBaseUrl:"https://afiyaapiqa.powermindinc.com",token:"eyJhbGciOiJSUzI1NiIsImtpZCI6IjcwZmM5YzU0YjhiMjQyMWZmMTgyOTgxNTQyZmQ0NjRlOWJlYzM1NDUiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiSmF5YXZlbml0aGEgR0siLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbGl0ZWVtci0zY2M0NyIsImF1ZCI6ImxpdGVlbXItM2NjNDciLCJhdXRoX3RpbWUiOjE3NzY2ODM3ODIsInVzZXJfaWQiOiI5N3hFYjJoSFptU3pWWlFvcHM4Yzc4bzRxUHcxIiwic3ViIjoiOTd4RWIyaEhabVN6VlpRb3BzOGM3OG80cVB3MSIsImlhdCI6MTc3NjY4Mzc4MiwiZXhwIjoxNzc2Njg3MzgyLCJlbWFpbCI6ImdrLmpheWF2ZW5pdGhhQHBvd2VyaG9sZGluZy1pbnRsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJtaWNyb3NvZnQuY29tIjpbIjg2N2ViM2MyLWFlMDgtNDlkZC1hNDNhLWU0OTg2YjZlZDA5YSJdLCJlbWFpbCI6WyJnay5qYXlhdmVuaXRoYUBwb3dlcmhvbGRpbmctaW50bC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJtaWNyb3NvZnQuY29tIn19.pUN8E40VNtIqGe5bwBrZerVAgPiQJn916nOrz-uXPZkdIEOJeC5Bxrt_byRcow7CEQrlpEvpJrOZOUReJRTRjX-sIQ8feT3oSI3dBqiI2A_KzfnqUnMJj7KAVTbGwsqvHLGoChVgkL75YDs_Npz-3arOVsMwo2KaGCLkthM7NqxB1oe22kMyM35f90nXFRhpoBK1jP3Dhp9NiCVhu7XDO0mn7_SMsCIwtuL09L3TNMPOUU0yWVysKwSXbPYNS8qaISRDaami2zjErzHmFn1KLTyC-UKHv-C7h2QnDP22WjHNkjkwAxcxlvoqOGFw1V9kFv_rIGE7rt7OvxVPEbD15Q"}}=e;const[o,r]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(h):null}catch{return null}})),[i,d]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(y):null}catch{return null}})),F=n.apiBaseUrl||o||l,v=n.hospitalId||i,[C,A]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(u):null}catch{return null}})),[k,I]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(f):null}catch{return null}})),D=n.idToken||n.token||C,z=n.email||k;t.useEffect((()=>{try{if("undefined"==typeof localStorage)return;const e=n.idToken||n.token;if(e&&String(e).trim()){localStorage.getItem(u)!==e&&(R(null),T(null),B(null),localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x),L(null),re(null),Ne(null),U(!1)),localStorage.setItem(u,e),A(e)}n.email&&String(n.email).trim()&&(localStorage.setItem(f,n.email),I(n.email)),n.apiBaseUrl&&String(n.apiBaseUrl).trim()&&(localStorage.setItem(h,n.apiBaseUrl.trim()),r(n.apiBaseUrl.trim())),null!=n.hospitalId&&String(n.hospitalId).trim()&&(localStorage.setItem(y,String(n.hospitalId).trim()),d(String(n.hospitalId).trim()))}catch(e){}}),[n.idToken,n.token,n.email,n.apiBaseUrl,n.hospitalId]);const[M,R]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(m):null}catch{return null}})),[W,T]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(g):null}catch{return null}})),[N,B]=t.useState((()=>{try{return"undefined"!=typeof localStorage?localStorage.getItem(x):null}catch{return null}})),[H,Q]=t.useState((()=>{try{if("undefined"==typeof localStorage)return!1;const e=localStorage.getItem(m),t=localStorage.getItem(u),n=localStorage.getItem(f);return!e&&!(!t||!n)}catch{return!1}})),[P,L]=t.useState(null),[j,U]=t.useState(!1),[Y,J]=t.useState(0);t.useEffect((()=>{M&&H&&Q(!1)}),[M,H]),t.useEffect((()=>{M||(D&&z?(U(!1),L((e=>"Sign in required. Redirecting to home..."===e?null:e))):(L("Sign in required. Redirecting to home..."),U(!0)))}),[M,D,z]),t.useEffect((()=>{if(!j)return;const e=n.homeUrl||"https://afiyaproqa.powermindinc.com/";if(!e||"undefined"==typeof window)return;const t=setTimeout((()=>{window.location.href=e}),2500);return()=>clearTimeout(t)}),[j,n.homeUrl]),t.useEffect((()=>{if(!H)return;const e=setTimeout((()=>{L("Request timed out. Please try again."),Q(!1)}),3e4);return()=>clearTimeout(e)}),[H]);const O=n.joinCallUrl||s;M&&String(O||"").replace(/\/?$/,"/");const q=function(e){if(!e||"string"!=typeof e)return{};try{const t=e.split(".");if(3!==t.length)return{};const n=t[1].replace(/-/g,"+").replace(/_/g,"/"),o=n.padEnd(n.length+(4-n.length%4)%4,"=");return JSON.parse(atob(o))}catch{return{}}}(D),K=N||q.name||q.sub||"User",G=()=>(new Date).toISOString().split("T")[0],X=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,[V,Z]=t.useState("upcoming"),[$,_]=t.useState([]),[ee,te]=t.useState(null),[ne,oe]=t.useState(!1),[ae,re]=t.useState(null),[le,ie]=t.useState(window.innerWidth<768),[de,se]=t.useState("today"),[ce,pe]=t.useState("today"),[ue,fe]=t.useState(!1),[me,ge]=t.useState(!1),[xe,he]=t.useState("all"),[ye,be]=t.useState("asc"),[Ee,we]=t.useState(""),[Se,Fe]=t.useState(!1),[ve,Ce]=t.useState(!1),[Ae,ke]=t.useState(!1),[Ie,De]=t.useState(null),[ze,Me]=t.useState(null),[Re,We]=t.useState(!1),[Te,Ne]=t.useState(null),[Be,He]=t.useState((()=>({x:Math.max(20,"undefined"!=typeof window?window.innerWidth-b-20:300),y:80}))),[Qe,Pe]=t.useState({width:b,height:560}),[Le,je]=t.useState(!1),[Ue,Ye]=t.useState({x:0,y:0}),[Je,Oe]=t.useState(!1),[qe,Ke]=t.useState(null),[Ge,Xe]=t.useState({x:0,y:0,width:0,height:0});t.useState(!1);const[Ve,Ze]=t.useState(1),$e=$.filter((e=>{if(!Ee.trim())return!0;const t=Ee.toLowerCase(),n=(e.patientName||"").toLowerCase(),o=String(e.patientId||"").toLowerCase();return n.includes(t)||o.includes(t)})),_e=5*(Ve-1),et=_e+5,tt=$e.slice(_e,et),nt=Math.ceil($e.length/5),ot=$e.length,[at,rt]=t.useState(G()),[lt,it]=t.useState(G()),[dt,st]=t.useState(),[ct,pt]=t.useState(),ut=e=>e?.id||e?._id||e?.appointmentId||e?.patientId||JSON.stringify(e),ft=e=>e?.image?e.image:null,mt=e=>e?e.charAt(0).toUpperCase():"?",gt=e=>{if(!e)return"#4C4DDC";const t=["#4C4DDC","#1CC3CE","#FF6B6B","#4ECDC4","#45B7D1","#FFA07A","#98D8C8","#F7DC6F"];return t[e.charCodeAt(0)%t.length]},xt=()=>{const e="asc"===ye?"desc":"asc";be(e);const t=[...$].sort(((t,n)=>{const o=new Date(t.appointmentDate||t.date||0),a=new Date(n.appointmentDate||n.date||0);return"asc"===e?o-a:a-o}));_(t),Ze(1),t.length>0&&te(t[0])},ht=t.useCallback((async()=>{if(console.log(M,"fetchAppointments -> appToken"),!M)return;try{if("undefined"!=typeof localStorage){if(localStorage.getItem(m)!==M)return}}catch(e){}console.log(W,"fetchAppointments -> doctorIdFromLogin");const e=W;oe(!0),re(null);try{const t={apiBaseUrl:F,hospitalId:v,doctorId:e,token:M},n=await c(V,at,lt,t);if(401===n.status||403===n.status){let e=!0;try{"undefined"!=typeof localStorage&&(e=localStorage.getItem(m)===M)}catch(e){}if(!e)return;try{"undefined"!=typeof localStorage&&(localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x))}catch(e){}return R(null),T(null),B(null),J((e=>e+1)),void re("Session expired. Re-authenticating...")}if(n.err)return void re(String(n.err||"Failed to fetch appointments"));const o=n.data||n.appointments||n||[];_(Array.isArray(o)?o:[]),Array.isArray(o)&&o.length>0?te(o[0]):te(null)}catch(e){console.error("Error fetching appointments:",e),re(e.message||"Failed to fetch appointments")}finally{oe(!1)}}),[V,at,lt,xe,F,v,W,M,D,z]),yt=e=>{te(e),Ne(null)},bt=async()=>{if(ee&&M){We(!0),Ne(null);try{const e={apiBaseUrl:F,hospitalId:v,doctorId:W,doctorName:N||K,appToken:M};console.log(ee,"selectedAppointment"),console.log(e,"callConfig");const t=await p(ee,e);if(console.log(t.status,"response"),401===t.status||403===t.status){try{"undefined"!=typeof localStorage&&(localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x))}catch(e){}return R(null),T(null),B(null),J((e=>e+1)),void Ne("Session expired. Re-authenticating...")}if(t.err||!t.data?.token)return void Ne(String(t.err||"Failed to initiate call"));const o=n.joinCallUrl||s,a=t.data.token?String(o||"").replace(/\/?$/,"")+t.data.token:"";console.log("joinCallUrl",a),De(t.data.token),Me(a||""),Fe(!0),Ce(!1),ke(!1),Pe({width:b,height:560}),He({x:Math.max(20,window.innerWidth-b-20),y:80})}catch(e){Ne(e.message||"Failed to initiate call")}finally{We(!1)}}},Et=()=>{Fe(!1),Ce(!1),ke(!1),De(null),Me(null),Ne(null),ht()},wt=()=>{Ae&&ke(!1),Ce(!ve)},St=()=>{ve&&Ce(!1),ke(!Ae)},Ft=e=>{if(0!==e.button)return;if(e.target.closest("button"))return;e.currentTarget.setPointerCapture&&e.currentTarget.setPointerCapture(e.pointerId),je(!0);const t=e.currentTarget.getBoundingClientRect();Ye({x:e.clientX-t.left,y:e.clientY-t.top})},vt=t.useCallback((e=>{if(!Ae)if(Le){const t=e.clientX-Ue.x,n=e.clientY-Ue.y,o=window.innerWidth-Qe.width,a=window.innerHeight-Qe.height;He({x:Math.max(0,Math.min(t,o)),y:Math.max(0,Math.min(n,a))})}else if(Je){const t=e.clientX-Ge.x,n=e.clientY-Ge.y;let o=Ge.width,a=Ge.height,r=Ge.posX,l=Ge.posY;const i=300,d=250,s=window.innerWidth-40,c=window.innerHeight-100;if("bottom-right"===qe)o=Math.min(Math.max(Ge.width+t,i),s),a=Math.min(Math.max(Ge.height+n,d),c),r+o>window.innerWidth&&(o=window.innerWidth-r),l+a>window.innerHeight&&(a=window.innerHeight-l);else if("bottom-left"===qe){o=Math.min(Math.max(Ge.width-t,i),s),r=Math.max(0,Ge.posX+t),0===r&&(o=Ge.posX+Ge.width),a=Math.min(Math.max(Ge.height+n,d),c),l+a>window.innerHeight&&(a=window.innerHeight-l)}else if("top-right"===qe){o=Math.min(Math.max(Ge.width+t,i),s),r+o>window.innerWidth&&(o=window.innerWidth-r);a=Math.min(Math.max(Ge.height-n,d),c),l=Math.max(0,Ge.posY+n),0===l&&(a=Ge.posY+Ge.height)}else if("top-left"===qe){o=Math.min(Math.max(Ge.width-t,i),s),r=Math.max(0,Ge.posX+t),0===r&&(o=Ge.posX+Ge.width);a=Math.min(Math.max(Ge.height-n,d),c),l=Math.max(0,Ge.posY+n),0===l&&(a=Ge.posY+Ge.height)}Pe({width:o,height:a}),He({x:r,y:l})}}),[Le,Je,Ue,qe,Ge,Be,Qe,Ae]),Ct=()=>{je(!1),Oe(!1),Ke(null)},At=(e,t)=>{t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture&&t.currentTarget.setPointerCapture(t.pointerId),Oe(!0),Ke(e),Xe({x:t.clientX,y:t.clientY,width:Qe.width,height:Qe.height,posX:Be.x,posY:Be.y})};t.useEffect((()=>{if(!Se||Ae)return;const e=()=>{if(!(window.innerWidth<768)){const e=ve?350:Qe.width,t=ve?60:Qe.height,n=window.innerWidth-40,o=window.innerHeight-100,a=Math.min(e,n),r=Math.min(t,o);a===Qe.width&&r===Qe.height||Pe({width:a,height:r});const l=window.innerWidth-a-20,i=window.innerHeight-r-20;He((e=>({x:Math.min(e.x,l),y:Math.min(e.y,i)})))}};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[Se,ve,Ae,Qe]),t.useEffect((()=>{if(!(D&&z&&(!M||Y>0)))return;let e=!1;return Q(!0),L(null),(async(e,t,n,o)=>{const a=`${e.replace(/\/$/,"")}/um/user/V1/sso/login?hospitalId=${encodeURIComponent(t)}`,r={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({idToken:n,email:o})};return console.log("[getTokenFromSso] request",{url:a,body:{idToken:n?n.slice(0,50)+"...":null,email:o}}),fetch(a,r).then((e=>(console.log("[getTokenFromSso] response status",e.status,e.statusText),e.ok?e.json().then((e=>(console.log("[getTokenFromSso] success",{hasData:!!e,dataKeys:e?Object.keys(e):[],hasAccessToken:!!e?.data?.access_token}),e))):e.json().then((t=>{const n=t?.resultInfo?.message||"SSO login failed";return console.log("[getTokenFromSso] error body",t),{err:n,status:e.status}})).catch((()=>({err:"Something went wrong!",status:e.status})))))).catch((e=>(console.error("[getTokenFromSso] catch",e),{err:e.message||"Network error"})))})(F,v,D,z).then((t=>{if(e)return;const n=function(e){return!e||e.err?null:e.data?.access_token??e.data?.token??e.token??e.accessToken??null}(t);if(400===t.status)return L(t.err||"Invalid request. Redirecting to home..."),Q(!1),void U(!0);if(t.err||!n){L(String(t.err||"Failed to get token")),R(null),T(null),B(null),J(0);try{"undefined"!=typeof localStorage&&(localStorage.removeItem(m),localStorage.removeItem(g),localStorage.removeItem(x))}catch(e){}}else{const e=function(e){if(!e?.data)return null;const t=e.data.doctor_id??e.data.doctorId??null;return console.log(t,"extractDoctorIdFromLoginResponse -> id"),null!=t?String(t):null}(t);console.log(e,"extractDoctorIdFromLoginResponse -> doctorId");const o=function(e){if(!e?.data)return null;const t=e.data.name??e.data.doctor_name??e.data.userName??null;return null!=t?String(t):null}(t);R(n),T(e),B(o),L(null),U(!1),J(0);try{"undefined"!=typeof localStorage&&(localStorage.setItem(m,n),e&&localStorage.setItem(g,e),o&&localStorage.setItem(x,o))}catch(e){}}})).catch((t=>{e||(L(t?.message||"Authentication failed. Please try again."),R(null),J(0))})).finally((()=>{e||Q(!1)})),()=>{e=!0}}),[F,v,D,z,Y,M]),t.useEffect((()=>{Ze(1),Ne(null)}),[V,de,at,lt,Ee,xe]),t.useEffect((()=>{!H&&M&&ht()}),[ht,M,H]),t.useEffect((()=>{const e=document.createElement("link");e.href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap",e.rel="stylesheet",document.head.appendChild(e);const t=document.createElement("style");t.innerHTML="\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @media (max-width: 768px) {\n .appointments-grid {\n grid-template-columns: 1.5fr 1fr 0.8fr !important;\n }\n .appointments-header-grid {\n grid-template-columns: 1.5fr 1fr 0.8fr !important;\n }\n .hide-on-mobile {\n display: none !important;\n }\n }\n @media (max-width: 480px) {\n .appointments-header-grid {\n font-size: 10px !important;\n }\n .appointments-grid {\n font-size: 11px !important;\n }\n }\n ",document.head.appendChild(t);const n=()=>{ie(window.innerWidth<768)};return window.addEventListener("resize",n),()=>{document.head.removeChild(e),document.head.removeChild(t),window.removeEventListener("resize",n)}}),[]),t.useEffect((()=>{const e=e=>{!ue||e.target.closest("button")||e.target.closest('input[type="date"]')||fe(!1),me&&!e.target.closest("[data-appointment-type-picker]")&&ge(!1)};return document.addEventListener("click",e),()=>{document.removeEventListener("click",e)}}),[ue,me]);let kt='"Nunito", serif';const It=!!P||!M&&!!(!D||!z);let Dt;return Dt=H&&D&&z?a.default.createElement("div",{className:E,[w]:"teleconsult-appointments",style:{fontFamily:kt,background:"#F5F5F7",boxSizing:"border-box",height:"100%",minHeight:"100vh",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"24px"}},a.default.createElement("style",null,"@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }"),a.default.createElement("div",{style:{width:"40px",height:"40px",border:"3px solid #f3f3f3",borderTop:"3px solid #4C4DDC",borderRadius:"50%",animation:"spin 1s linear infinite",marginBottom:"16px"}}),a.default.createElement("p",{style:{fontSize:"14px",color:"#666",margin:0}},"Checking authorisation...")):a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{className:E,[w]:"teleconsult-appointments",style:{fontFamily:kt,background:"#F5F5F7",boxSizing:"border-box",height:"100%",minHeight:"100vh",width:"100%",display:"flex",flexDirection:"column",overflow:"hidden"}},a.default.createElement("div",{style:{background:"#FFFFFF",padding:le?"10px 12px":"12px 24px",display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:"1px solid #E5E5E5",flexWrap:"nowrap",gap:le?"8px":"0"}},a.default.createElement("div",{style:{position:"relative",width:le?"calc(100% - 90px)":"480px",maxWidth:le?"none":"480px"}},a.default.createElement("input",{type:"text",placeholder:"Search by patient name or ID",value:Ee,onChange:e=>we(e.target.value),style:{width:"100%",padding:le?"8px 32px 8px 10px":"8px 36px 8px 14px",border:"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"12px":"13px",fontFamily:kt,background:"#FFFFFF",outline:"none",boxSizing:"border-box"}}),Ee&&a.default.createElement("button",{onClick:()=>we(""),style:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",background:"none",border:"none",cursor:"pointer",padding:"4px",display:"flex",alignItems:"center",justifyContent:"center",color:"#999",fontSize:"16px"},title:"Clear search"},"✕")),!1),a.default.createElement("div",{style:{padding:le?"12px":"16px 24px",flex:1,minHeight:0,overflow:"hidden",display:"flex",flexDirection:"column"}},a.default.createElement("div",{style:{marginBottom:le?"10px":"14px"}},a.default.createElement("h1",{style:{fontSize:le?"18px":"22px",fontWeight:700,color:"#1a1a1a",margin:"0 0 2px 0"}},"Tele Consultation"),a.default.createElement("p",{style:{fontSize:le?"11px":"12px",color:"#999",margin:0}},"Displaying All Tele Consultation Appointments")),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:le?"flex-start":"center",marginBottom:le?"10px":"14px",flexDirection:le?"column":"row",gap:le?"12px":"0"}},a.default.createElement("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",width:le?"100%":"auto"}},a.default.createElement("button",{onClick:()=>Z("upcoming"),style:{background:"upcoming"===V?"#4C4DDC":"#FFFFFF",padding:le?"8px 10px":"9px 16px",border:"upcoming"===V?"none":"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"10px":"13px",color:"upcoming"===V?"white":"#555555",fontWeight:600,fontFamily:kt,cursor:"pointer",flex:le?"1 1 auto":"none",minWidth:le?"0":"auto",transition:"all 0.3s ease",whiteSpace:"nowrap"}},"Upcoming Appointments"),a.default.createElement("button",{onClick:()=>Z("completed"),style:{background:"completed"===V?"#4C4DDC":"#FFFFFF",padding:le?"8px 10px":"9px 16px",border:"completed"===V?"none":"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"10px":"13px",color:"completed"===V?"white":"#555555",fontWeight:600,fontFamily:kt,cursor:"pointer",flex:le?"1 1 auto":"none",minWidth:le?"0":"auto",transition:"all 0.3s ease",whiteSpace:"nowrap"}},"Completed Appointments"),a.default.createElement("button",{onClick:()=>Z("cancelled"),style:{background:"cancelled"===V?"#4C4DDC":"#FFFFFF",padding:le?"8px 10px":"9px 16px",border:"cancelled"===V?"none":"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"10px":"13px",color:"cancelled"===V?"white":"#555555",fontWeight:600,fontFamily:kt,cursor:"pointer",flex:le?"1 1 auto":"none",minWidth:le?"0":"auto",transition:"all 0.3s ease",whiteSpace:"nowrap"}},"Cancelled Appointments")),a.default.createElement("div",{style:{display:"flex",gap:"8px",alignItems:"center",width:"auto",position:"relative",justifyContent:le?"flex-start":"flex-end",flexWrap:"wrap"}},a.default.createElement("button",{onClick:()=>{ue||(st(at),pt(lt),pe(de)),fe(!ue)},style:{padding:"8px 12px",fontFamily:kt,fontWeight:600,border:"1px solid #E5E5E5",borderRadius:"6px",fontSize:le?"11px":"13px",color:"#1a1a1a",background:"#FFFFFF",display:"flex",alignItems:"center",gap:le?"4px":"6px",cursor:"pointer",flex:"none",minWidth:le?"100px":"auto",justifyContent:"center"}},a.default.createElement("svg",{width:le?"12":"14",height:le?"12":"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a.default.createElement("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),a.default.createElement("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),a.default.createElement("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),a.default.createElement("line",{x1:"3",y1:"10",x2:"21",y2:"10"})),a.default.createElement("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},(()=>{switch(de){case"today":default:return"Today";case"tomorrow":return"Tomorrow";case"currentWeek":return"Current Week";case"thisMonth":return"This Month";case"currentYear":return"Current Year";case"custom":return le?"Custom":`${at} to ${lt}`}})()),a.default.createElement("svg",{width:le?"8":"10",height:le?"8":"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},a.default.createElement("polyline",{points:"6 9 12 15 18 9"}))),ue&&a.default.createElement("div",{style:{position:"absolute",top:"100%",right:le?"auto":0,left:le?0:"auto",marginTop:"4px",background:"#FFFFFF",border:"1px solid #E5E5E5",borderRadius:"8px",boxShadow:"0 4px 16px rgba(0,0,0,0.15)",padding:"8px",zIndex:1e3,minWidth:le?"280px":"240px",width:le?"calc(100vw - 24px)":"auto",maxWidth:le?"calc(100vw - 24px)":"280px"}},a.default.createElement("div",{style:{marginBottom:"custom"===ce?"12px":"0"}},["thisMonth","today","tomorrow","currentWeek","currentYear","custom"].map((e=>a.default.createElement("button",{key:e,onClick:()=>{if(pe(e),"custom"!==e){const t=(e=>{const t=new Date;let n,o;switch(e){case"today":default:n=o=G();break;case"tomorrow":const e=new Date(t);e.setDate(e.getDate()+1),n=o=X(e);break;case"currentWeek":const a=new Date(t),r=new Date(t),l=t.getDay(),i=0===l?-6:1-l;a.setDate(t.getDate()+i),r.setDate(a.getDate()+6),n=X(a),o=X(r);break;case"thisMonth":const d=new Date(t.getFullYear(),t.getMonth(),1),s=new Date(t.getFullYear(),t.getMonth()+1,0);n=X(d),o=X(s);break;case"currentYear":n=`${t.getFullYear()}-01-01`,o=`${t.getFullYear()}-12-31`}return{from:n,to:o}})(e);se(e),rt(t.from),it(t.to),st(t.from),pt(t.to),fe(!1)}else st(""),pt("")},style:{width:"100%",padding:"10px 12px",background:ce===e?"#E8EEF4":"#FFFFFF",border:"none",borderRadius:"4px",fontSize:"13px",fontFamily:kt,cursor:"pointer",textAlign:"left",fontWeight:ce===e?600:400,color:ce===e?"#4C4DDC":"#1a1a1a",marginBottom:"4px",display:"flex",justifyContent:"space-between",alignItems:"center",transition:"all 0.2s ease"},onMouseEnter:t=>{ce!==e&&(t.target.style.background="#F5F5F5")},onMouseLeave:t=>{ce!==e&&(t.target.style.background="#FFFFFF")}},a.default.createElement("span",null,{thisMonth:"This Month",today:"Today",tomorrow:"Tomorrow",currentWeek:"Current Week",currentYear:"Current Year",custom:"Custom"}[e]),ce===e&&a.default.createElement("span",{style:{color:"#4C4DDC",fontSize:"16px"}},"✓"))))),"custom"===ce&&a.default.createElement("div",{style:{paddingTop:"8px",borderTop:"1px solid #E5E5E5"}},a.default.createElement("div",{style:{marginBottom:"8px"}},a.default.createElement("input",{type:"date",value:dt,onChange:e=>st(e.target.value),placeholder:"Start Date",style:{width:"100%",padding:"10px 8px",border:"1px solid #E5E5E5",borderRadius:"4px",fontSize:"13px",fontFamily:kt,boxSizing:"border-box",cursor:"pointer"}})),a.default.createElement("div",{style:{marginBottom:"12px"}},a.default.createElement("input",{type:"date",value:ct,onChange:e=>pt(e.target.value),placeholder:"End Date",style:{width:"100%",padding:"10px 8px",border:"1px solid #E5E5E5",borderRadius:"4px",fontSize:"13px",fontFamily:kt,boxSizing:"border-box",cursor:"pointer"}})),a.default.createElement("div",{style:{display:"flex",gap:"8px"}},a.default.createElement("button",{onClick:()=>{pe(de),st(at),pt(lt),fe(!1)},style:{flex:1,padding:"10px 12px",background:"#FFFFFF",color:"#4C4DDC",border:"1px solid #4C4DDC",borderRadius:"4px",fontSize:"13px",fontFamily:kt,fontWeight:600,cursor:"pointer"}},"Cancel"),a.default.createElement("button",{onClick:()=>{dt&&ct&&(se("custom"),rt(dt),it(ct),fe(!1))},style:{flex:1,padding:"10px 12px",background:"#4C4DDC",color:"#FFFFFF",border:"none",borderRadius:"4px",fontSize:"13px",fontFamily:kt,fontWeight:600,cursor:"pointer"}},"Submit")))))),a.default.createElement("div",{style:{display:"flex",flexDirection:le?"column":"row",gap:le?"12px":"14px",flex:1,minHeight:0,overflow:le?"auto":"hidden"}},a.default.createElement("div",{style:{flex:le?"none":"1 1 65%",width:le?"100%":"auto",display:"flex",flexDirection:"column",minHeight:le?"400px":0,maxHeight:le?"none":"100%",overflow:"hidden"}},a.default.createElement("div",{style:{background:"#FFFFFF",borderRadius:"8px",boxShadow:"0 1px 4px rgba(0,0,0,0.08)",overflow:"hidden",display:"flex",flexDirection:"column",flex:le?"none":1,minHeight:le?"auto":0,maxHeight:le?"none":"100%"}},a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:le?"12px 14px":"14px 18px",borderBottom:"1px solid #F1F1F1"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:le?"6px":"8px"}},a.default.createElement("span",{style:{fontSize:le?"14px":"15px",fontWeight:700,color:"#1a1a1a"}},"Appointments"),a.default.createElement("span",{style:{background:"#4C4DDC",color:"#fff",fontSize:le?"10px":"11px",fontWeight:600,padding:le?"2px 7px":"3px 8px",borderRadius:"12px"}},ot))),a.default.createElement("div",{className:"appointments-header-grid",style:{display:"grid",gridTemplateColumns:le?"1.5fr 1fr 0.8fr":"2.5fr 1fr 1.5fr 0.8fr 1.2fr",gap:le?"8px":"12px",padding:le?"8px 12px":"10px 18px",background:"#F5F5F5",fontSize:le?"10px":"12px",fontWeight:600,color:"#666"}},a.default.createElement("div",null,"Patients name"),!le&&a.default.createElement("div",null,"Patient ID"),a.default.createElement("div",{onClick:xt,style:{display:"flex",alignItems:"center",gap:"3px",cursor:"pointer",userSelect:"none"}},"Date",a.default.createElement("span",{style:{opacity:.7,fontSize:"10px"}},"asc"===ye?"▲":"▼")),!le&&a.default.createElement("div",null,"Slot"),!le&&a.default.createElement("div",null,"Doctor")),a.default.createElement("div",{style:{overflowY:"auto",overflowX:"hidden",flex:1,minHeight:0,maxHeight:le?"none":"430px",WebkitOverflowScrolling:"touch"}},H?a.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",padding:"40px",color:"#888"}},a.default.createElement("div",{style:{textAlign:"center"}},a.default.createElement("div",{style:{width:"40px",height:"40px",border:"3px solid #f3f3f3",borderTop:"3px solid #4C4DDC",borderRadius:"50%",animation:"spin 1s linear infinite",margin:"0 auto 10px"}}),"Getting token...")):ne?a.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",padding:"40px",color:"#888"}},a.default.createElement("div",{style:{textAlign:"center"}},a.default.createElement("div",{style:{width:"40px",height:"40px",border:"3px solid #f3f3f3",borderTop:"3px solid #4C4DDC",borderRadius:"50%",animation:"spin 1s linear infinite",margin:"0 auto 10px"}}),"Loading appointments...")):ae?a.default.createElement("div",{style:{padding:"40px",textAlign:"center",color:"#FF0000"}},a.default.createElement("div",{style:{fontSize:"16px",marginBottom:"8px"}},"⚠️ Error"),a.default.createElement("div",{style:{fontSize:"13px"}},ae),a.default.createElement("button",{onClick:ht,style:{marginTop:"16px",padding:"8px 16px",background:"#4C4DDC",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontFamily:kt}},"Retry")):0===tt.length?a.default.createElement("div",{style:{padding:"40px",textAlign:"center",color:"#888"}},a.default.createElement("div",{style:{fontSize:"16px",marginBottom:"8px"}},"📋"),a.default.createElement("div",{style:{fontSize:"13px"}},Ee?`No appointments found for "${Ee}"`:"No appointments found"),Ee&&a.default.createElement("button",{onClick:()=>we(""),style:{marginTop:"12px",padding:"6px 12px",background:"#4C4DDC",color:"white",border:"none",borderRadius:"4px",cursor:"pointer",fontSize:"12px",fontFamily:kt}},"Clear Search")):tt.map((e=>a.default.createElement("div",{key:ut(e),role:"button",tabIndex:0,onClick:()=>yt(e),onKeyDown:t=>"Enter"===t.key&&yt(e),className:"appointments-grid",style:{display:"grid",gridTemplateColumns:le?"1.5fr 1fr 0.8fr":"2.5fr 1fr 1.5fr 0.8fr 1.2fr",gap:le?"8px":"12px",padding:le?"10px 12px":"12px 18px",background:ut(ee)===ut(e)?"#E8EEF4":"#FFFFFF",borderTop:"1px solid #F1F1F1",alignItems:"center",cursor:"pointer",fontSize:le?"11px":"13px"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:le?"8px":"10px"}},ft(e)?a.default.createElement("img",{src:e.image,alt:"",style:{width:le?"32px":"36px",height:le?"32px":"36px",borderRadius:"50%",objectFit:"cover"}}):a.default.createElement("div",{style:{width:le?"32px":"36px",height:le?"32px":"36px",borderRadius:"50%",background:gt(e.patientName),display:"flex",alignItems:"center",justifyContent:"center",color:"#FFFFFF",fontWeight:600,fontSize:le?"14px":"16px"}},mt(e.patientName)),a.default.createElement("div",null,a.default.createElement("div",{style:{fontWeight:600,color:"#1a1a1a",fontSize:le?"11px":"13px"}},e.patientName),a.default.createElement("div",{style:{fontSize:le?"9px":"11px",color:"#888"}},e.email))),!le&&a.default.createElement("div",{style:{color:"#555",fontSize:"12px"}},e.patientId),a.default.createElement("div",{style:{color:"#555",fontSize:le?"10px":"12px"}},(()=>{const t=e.appointmentDate||"",n=t.match(/\s(\d{1,2}:\d{2}(?:\s*(?:AM|PM))?)$/i);return n?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",null,t.slice(0,n.index).trim()),a.default.createElement("div",{style:{fontSize:le?"9px":"11px",color:"#888"}},n[1].trim())):a.default.createElement("div",null,t)})()),!le&&a.default.createElement("div",{style:{color:"#555",fontSize:"12px"}},e.appointmentTime||"-"),!le&&a.default.createElement("div",{style:{color:"#555",fontSize:"12px"}},e.doctorName||e.doctor||"-"))))),!ne&&!ae&&tt.length>0&&a.default.createElement("div",{style:{padding:le?"12px 14px":"14px 18px",borderTop:"1px solid #F1F1F1",display:"flex",justifyContent:"space-between",alignItems:"center",background:"#FFFFFF",flexWrap:le?"wrap":"nowrap",gap:le?"10px":"0"}},a.default.createElement("div",{style:{fontSize:le?"11px":"12px",color:"#666"}},"Showing page ",Ve," of ",nt," (",ot," total)"),a.default.createElement("div",{style:{display:"flex",gap:"6px",alignItems:"center"}},a.default.createElement("button",{onClick:()=>Ze((e=>Math.max(1,e-1))),disabled:1===Ve,style:{padding:le?"6px 10px":"6px 12px",border:"1px solid #E5E5E5",borderRadius:"4px",background:1===Ve?"#F5F5F5":"#FFFFFF",color:1===Ve?"#999":"#1a1a1a",fontSize:le?"11px":"12px",fontFamily:kt,fontWeight:600,cursor:1===Ve?"not-allowed":"pointer",opacity:1===Ve?.5:1}},"Previous"),a.default.createElement("div",{style:{display:"flex",gap:"4px"}},[...Array(Math.min(5,nt))].map(((e,t)=>{let n;return n=nt<=5||Ve<=3?t+1:Ve>=nt-2?nt-4+t:Ve-2+t,a.default.createElement("button",{key:n,onClick:()=>Ze(n),style:{padding:le?"6px 10px":"6px 12px",border:Ve===n?"none":"1px solid #E5E5E5",borderRadius:"4px",background:Ve===n?"#4C4DDC":"#FFFFFF",color:Ve===n?"#FFFFFF":"#1a1a1a",fontSize:le?"11px":"12px",fontFamily:kt,fontWeight:600,cursor:"pointer",minWidth:le?"32px":"36px"}},n)}))),a.default.createElement("button",{onClick:()=>Ze((e=>Math.min(nt,e+1))),disabled:Ve===nt,style:{padding:le?"6px 10px":"6px 12px",border:"1px solid #E5E5E5",borderRadius:"4px",background:Ve===nt?"#F5F5F5":"#FFFFFF",color:Ve===nt?"#999":"#1a1a1a",fontSize:le?"11px":"12px",fontFamily:kt,fontWeight:600,cursor:Ve===nt?"not-allowed":"pointer",opacity:Ve===nt?.5:1}},"Next"))))),a.default.createElement("div",{style:{flex:le?"none":"1 1 35%",width:le?"100%":"auto",display:ee||!le?"flex":"none",flexDirection:"column",minHeight:le?"auto":0}},a.default.createElement("div",{style:{border:"1px solid #E5E5E5",borderRadius:"8px",overflow:"hidden",background:"#FFFFFF",boxShadow:"0 1px 4px rgba(0,0,0,0.08)",display:"flex",flexDirection:"column",flex:le?"none":1,minHeight:le?"auto":0}},ee?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:le?"12px 14px":"16px 18px",background:"#E8EEF4",borderBottom:"1px solid #E5E5E5"}},a.default.createElement("div",null,a.default.createElement("div",{style:{color:"#002668",fontSize:le?"14px":"16px",fontWeight:"700"}},ee.patientName||"N/A"),a.default.createElement("div",{style:{color:"#002668",fontSize:le?"11px":"13px"}},ee.patientId||ee.mrn||"N/A")),a.default.createElement("div",null,ft(ee)?a.default.createElement("img",{style:{width:le?"36px":"44px",height:le?"36px":"44px",borderRadius:"50%",objectFit:"cover"},src:ee.image,alt:ee.patientName}):a.default.createElement("div",{style:{width:le?"36px":"44px",height:le?"36px":"44px",borderRadius:"50%",background:gt(ee.patientName),display:"flex",alignItems:"center",justifyContent:"center",color:"#FFFFFF",fontWeight:700,fontSize:le?"16px":"20px"}},mt(ee.patientName)))),a.default.createElement("div",{style:{padding:le?"12px 14px":"14px 18px",gap:le?"10px":"12px",display:"flex",flexDirection:"column",background:"white",overflow:"auto",flex:1,position:"relative"}},a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Speciality"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.specialisation||ee?.speciality||"N/A")),a.default.createElement("div",{style:{textAlign:"right"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Appointment Type"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.type||ee?.appointmentType||"Online"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Appointment Date"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.date||ee?.appointmentDate||"N/A")),a.default.createElement("div",{style:{textAlign:"right"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Appointment Time"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.time||ee?.appointmentTime||"N/A"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Doctor"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.doctor||ee?.doctorName||"N/A"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Hospital"),a.default.createElement("div",{style:{fontWeight:"700",fontSize:le?"12px":"13px"}},ee?.hospital||ee?.hospitalName||"N/A"))),a.default.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},a.default.createElement("div",{style:{textAlign:"left"}},a.default.createElement("div",{style:{fontSize:le?"10px":"11px",color:"#888",marginBottom:"3px"}},"Reason for Appointment"),a.default.createElement("div",{style:{fontWeight:"600",fontSize:le?"11px":"12px",lineHeight:"1.4"}},ee?.reason||ee?.reasonForAppointment||"No reason provided"))),("upcoming"===V||"completed"===V&&(e=>{const t=e?.date||e?.appointmentDate,n=e?.time||e?.appointmentTime;if(!t||!n)return!1;try{const e=String(n).trim().match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);let o,a;if(e){o=parseInt(e[1],10),a=parseInt(e[2],10);const t=e[3].toUpperCase();"AM"===t&&12===o&&(o=0),"PM"===t&&12!==o&&(o+=12)}else{const e=String(n).trim().split(":");o=parseInt(e[0],10),a=parseInt(e[1],10)}if(isNaN(o)||isNaN(a))return!1;const r=new Date(`${t} ${String(o).padStart(2,"0")}:${String(a).padStart(2,"0")}:00`);if(isNaN(r.getTime()))return!1;const l=new Date(r.getTime()+72e5);return new Date<=l}catch{return!1}})(ee))&&a.default.createElement("div",{style:{display:"flex",flexDirection:le?"column":"row",gap:"6px",marginTop:"10px"}},a.default.createElement("button",{type:"button",onClick:Re?void 0:bt,disabled:Re,style:{flex:1,background:Re?"#99e4e8":"#1CC3CE",color:"#FFFFFF",border:"1px solid #1CC3CE",borderRadius:"6px",padding:le?"10px 8px":"8px 6px",fontFamily:kt,fontWeight:600,fontSize:le?"11px":"12px",cursor:Re?"not-allowed":"pointer"}},Re?"Connecting...":"Join Call >")),("upcoming"===V||"completed"===V)&&Te&&a.default.createElement("div",{style:{fontSize:"11px",color:"#e53935",marginTop:"6px",textAlign:"center",width:"100%"}},"⚠️ ",Te))):a.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",padding:"40px",color:"#888",textAlign:"center"}},a.default.createElement("div",null,a.default.createElement("div",{style:{fontSize:"16px",marginBottom:"8px"}},"📋"),a.default.createElement("div",{style:{fontSize:"13px"}},"Select an appointment to view details"))))))),Se&&a.default.createElement("div",{style:{position:"fixed",left:Ae?"0":le?"10px":`${Be.x}px`,top:Ae?"0":le?"70px":`${Be.y}px`,right:Ae?"0":le?"10px":"auto",bottom:Ae?"0":"auto",width:Ae?"100vw":le?"calc(100vw - 20px)":ve?"350px":`${Qe.width}px`,height:Ae?"100vh":ve?"auto":le?"300px":`${Qe.height}px`,background:"#FFFFFF",borderRadius:Ae?"0":"8px",boxShadow:"0 8px 24px rgba(0, 0, 0, 0.3)",zIndex:1e5,overflow:"hidden",display:"flex",flexDirection:"column",transition:Le||Je?"none":"all 0.3s ease"}},a.default.createElement("div",{onPointerDown:le||Ae?void 0:Ft,onPointerMove:le||Ae?void 0:vt,onPointerUp:le||Ae?void 0:Ct,onPointerCancel:le||Ae?void 0:Ct,style:{background:"linear-gradient(135deg, #4C4DDC 0%, #3A3BBD 100%)",color:"#FFFFFF",padding:le?"8px 10px":"10px 12px",display:"flex",justifyContent:"space-between",alignItems:"center",cursor:le||Ae?"default":"move",userSelect:"none"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:le?"6px":"8px",flex:1,minWidth:0}},a.default.createElement("div",{style:{width:le?"6px":"8px",height:le?"6px":"8px",borderRadius:"50%",background:"#FF4444",animation:"pulse 2s infinite",flexShrink:0}}),a.default.createElement("span",{style:{fontSize:le?"11px":"13px",fontWeight:600,fontFamily:kt,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},"Video Call - ",ee?.patientName||"Patient")),a.default.createElement("div",{style:{display:"flex",gap:le?"4px":"6px",alignItems:"center",flexShrink:0}},a.default.createElement("button",{onClick:wt,style:{background:"rgba(255, 255, 255, 0.2)",border:"1px solid rgba(255, 255, 255, 0.3)",borderRadius:"6px",color:"#FFFFFF",cursor:"pointer",padding:le?"5px 8px":"6px 10px",lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",minWidth:le?"28px":"32px",height:le?"28px":"32px",transition:"background 0.2s ease"},onMouseEnter:e=>e.target.style.background="rgba(255, 255, 255, 0.3)",onMouseLeave:e=>e.target.style.background="rgba(255, 255, 255, 0.2)",title:ve?"Restore":"Minimize"},ve?a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("rect",{x:"3",y:"3",width:"10",height:"10",stroke:"white",strokeWidth:"1.8",fill:"none"})):a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("line",{x1:"3",y1:"8",x2:"13",y2:"8",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round"}))),a.default.createElement("button",{onClick:St,style:{background:"rgba(255, 255, 255, 0.2)",border:"1px solid rgba(255, 255, 255, 0.3)",borderRadius:"6px",color:"#FFFFFF",cursor:"pointer",padding:le?"5px 8px":"6px 10px",lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",minWidth:le?"28px":"32px",height:le?"28px":"32px",transition:"background 0.2s ease"},onMouseEnter:e=>e.target.style.background="rgba(255, 255, 255, 0.3)",onMouseLeave:e=>e.target.style.background="rgba(255, 255, 255, 0.2)",title:Ae?"Exit Fullscreen":"Fullscreen"},Ae?a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("path",{d:"M10 3H13V6M6 13H3V10M13 10V13H10M3 6V3H6",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})):a.default.createElement("svg",{width:le?"14":"16",height:le?"14":"16",viewBox:"0 0 16 16",fill:"none"},a.default.createElement("path",{d:"M3 6V3H6M13 10V13H10M10 3H13V6M6 13H3V10",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"}))),a.default.createElement("button",{onClick:Et,style:{background:"rgba(255, 255, 255, 0.2)",border:"1px solid rgba(255, 255, 255, 0.3)",borderRadius:"6px",color:"#FFFFFF",cursor:"pointer",padding:le?"5px 8px":"6px 10px",lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",minWidth:le?"28px":"32px",height:le?"28px":"32px",fontWeight:"bold",fontSize:le?"18px":"22px",transition:"background 0.2s ease"},onMouseEnter:e=>e.target.style.background="rgba(255, 255, 255, 0.3)",onMouseLeave:e=>e.target.style.background="rgba(255, 255, 255, 0.2)",title:"Close"},"×"))),a.default.createElement("div",{style:{flex:1,background:"#000000",position:"relative",display:ve?"none":"flex",flexDirection:"column"}},a.default.createElement("iframe",{src:(()=>{if(!Ie)return"";return`${String(O||"")}${Ie}`})(),style:{width:"100%",height:"100%",border:"none",flex:1},allow:"camera; microphone; display-capture; autoplay",allowFullScreen:!0,title:"Video Call"})),!le&&!Ae&&!ve&&a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{onPointerDown:e=>At("top-left",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",left:0,top:0,width:"16px",height:"16px",cursor:"nwse-resize",background:"transparent",zIndex:10001}}),a.default.createElement("div",{onPointerDown:e=>At("top-right",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",right:0,top:0,width:"16px",height:"16px",cursor:"nesw-resize",background:"transparent",zIndex:10001}}),a.default.createElement("div",{onPointerDown:e=>At("bottom-left",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",left:0,bottom:0,width:"16px",height:"16px",cursor:"nesw-resize",background:"transparent",zIndex:10001}}),a.default.createElement("div",{onPointerDown:e=>At("bottom-right",e),onPointerMove:vt,onPointerUp:Ct,onPointerCancel:Ct,style:{position:"absolute",right:0,bottom:0,width:"16px",height:"16px",cursor:"nwse-resize",background:"transparent",zIndex:10001}})),a.default.createElement("style",null,"\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n "))),It&&a.default.createElement("div",{style:{position:"fixed",inset:0,zIndex:1e5,display:"flex",alignItems:"center",justifyContent:"center",padding:"24px",background:"rgba(0,0,0,0.4)",boxSizing:"border-box"}},a.default.createElement("div",{style:{fontFamily:kt,maxWidth:"400px",width:"100%",padding:"32px 24px",background:"#FFFFFF",borderRadius:"12px",boxShadow:"0 8px 32px rgba(0,0,0,0.2)",textAlign:"center"}},a.default.createElement("div",{style:{fontSize:"48px",marginBottom:"16px"}},"🔒"),a.default.createElement("h2",{style:{fontSize:"20px",fontWeight:700,color:"#1a1a1a",margin:"0 0 8px 0"}},"Access Denied"),a.default.createElement("p",{style:{fontSize:"14px",color:"#666",margin:0,lineHeight:1.5}},"You do not have permission to access Afiya Pro. Please contact administrator for assistance.")))),a.default.createElement(S,null,Dt)},v=Object.freeze({ICD_ONLY:"ICD_ONLY",CLAUDE_ONLY:"CLAUDE_ONLY",AUTO:"AUTO"}),C=`${l}/insurance/api/icd/suggest`;async function A(e,t){if(!e||!e.trim())throw new Error("Query cannot be empty");const n=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e.trim(),mode:t})});if(!n.ok){const e=await n.json().catch((()=>({}))),t=e?.message||e?.error?.message||`API error: ${n.status} ${n.statusText}`;throw new Error(t)}const o=await n.json(),a=o?.data??o;if(Array.isArray(a?.matches))return{matches:a.matches,note:a.note||""};if(Array.isArray(a))return{matches:a,note:""};if(Array.isArray(a?.results))return{matches:a.results.map((e=>({code:e.code,description:e.description||e.name||"",reason:e.reason||""}))),note:a.note||""};throw new Error("Unexpected response format from ICD suggest API")}const k="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADsQAAA7EB9YPtSQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAB67SURBVHic7X15nBXVmfbznqp7b680jbIJIsY9LuPCB4rL4BLXRGMUjMQ1Jpo4mm8SxlE0iR1j9HOJQTT5DN/kc7KZKJM4aDSMohglLhFRRhFQVEQFItI0fbe+t6rOM39U1b11t6a770onD7+ibtf6nvM+533fs5aggcC3T/w0tPpXACfA0WPgMAqtV8Lmr9Erv5Tjn7HrItfyE/aCYV8FwzgNhkyGUn1QshrAQmy05tdLrkpA6i2ADy4/IoT2Ue8DGA8ScAho7e4dDTj6DdjO2TL9hXU1leulo6+BUjfDVGEoAQwFKAUYXtYJr5F9l9xZS5kqCVVvATJob+8AMB4AQO8/AmBmfxCIP3PZEZNqJRKfO/JGOLwdZDgrR0A2AKDsXyt5qoGGIYDs98wnAF4GEFR6dq8BkGNgq5/XQh4umXoUNG/MVXxAJv8A8V+1kKdaaBgCAABE/q1oRpNZEmjM4JNTZlRfGP0dkJIlorflyIYtcEYuqr4s1UNDEIDsUlx7wmlI22eAZG6JA3KVAEDrK6oqzx8PnQzylIL35lslmybU1rlcd/Lu1ZSnmqg7Afj2aROxdtnL0OpxkGfC0ZLrAojCv/EFPn7Y6KoJpeUyEKrEu5GJARynExpdcPgO13zm2qrJU0XUnQBg+CcQOTyTubaTFwSiGAnCsPUFVRHnoZkGwEtKKj9jhRy3lkIAmiEIbuWa06dUQ6Zqoq4EiG+yT6OMOD0nk21mM7Y/JQjOrYpQ4bXTQU4seK9G7vvT2otJMrGBpJu+uGDbexxZFbmqhLoQgKQR3WR1UfEP2tjTyAZ4XmamnEBJK0ECrafyp0eEKi+cPqa08j2TpAlYOs8tAE7k0MPMZmvl9s3pIysuV5VQcwLE/sqxsY/tp0XhRgiUFTkxT7EE0nau4rWX6bkkMDHa6qy4gOSuJZXvu6S0b/6zMlHtBm3uD1EySUGeiW5MVzVQrRRqSoDEB5xA2s8IcBwEgAA6PBWUUYEM91yA5eRlfAEJHNhOT8WF1NKdlQOFMpBAnxUgpbvZkVMgIoAAohCBkvuiG60bKi5fhVEzAmzblJzshJxnIdjfV74IAGXCbj4x19xrAkmruO/PkAArZdaqdMUF1c5filib7G9Lu4FqkAAwYbeclE1TJm24ObrR+kHFZawgakKA3g/79jVhPAvhp3IyyNvs1rNAaQlYAAIpG3CcREkSaPyiKsKOHrsUwIaSAWjSigVLPjRgt5wKqk7kEjuzvz662foRyYbpdwmi6gTo/ZC7iGE+DpHdiykfAGDuivTYOxyG9lgNzZegeQdEDoCoH5Soh69BS9991ZBXjn/GhoNrStQ+Eoj07QWH50HzYejQSmvEmR9YnV/P7VYLpE/c4/8c22RfXw15y0VVWcnlDMUm2E9AMCOnVASU72YQN8CQL7aMCL2Qc/+yo3eDtt+HrU3Ynum19UakrRly7uq3qyr7ooNvgqG+A1MBpgGYClDq53Lci5fkXEeaiR772wJ8h4AKtmJSu79JABoE5Lz28ebCaso9WFTVAsR2c+7JKD9/g7sXYBXDoSPzlQ8AcsyfN0JzvlcKCeI/YVlTqq18AJCzXv8uqC8A8ZHndrZBGbcWXCdit3aGukTJRQLYfrrccwhaPAH4/2ObUwdXW/bBoGoWILoxfQVE7vOi4kLT7/79Yhrm6SNHyrb+nsUnpxwG2jE5+bWqK77g3UtnNCHdcziM8Fo56S9b+7s20WPPBPkrEmH3ZgQtgNt+peW9dNI4bNResr0G4u8QVSFA90ZOCsF+Awrt/Zj+Z5st8wwZI7FqyFAvxLvtMyB8GESohCuAptzXsZv59XrK6aMqLsAU+x4I2vPNfVb58q5tmOcMN+UDQOso8zEFXlEQ54j3pwBKeHnvRuuY+kmZRcUJEP3IPk+IM4MJltwIudfRzpkjRsgnlX53o6C5M3y/AHcDKIx93LxQAP6N77GpTiJmUFECbN7MVgrnFU20m3BSYVb7LpFVlXxvI6J5pDkHgiX+35nCkN3vF43Y36qXfD4qSoAW275CgHF5CQ1A/l9bR2inHkI1UIiIo2heJkC0nwIxZ8sWttdPygoSgG8zAsG3cny+v3d/b7KUcV2l3rczoHmUbIAw0x9QxAqMiqTsy+slH1BBAsSarUsgmABkfX7Q94uSq3dU3RuOaB4Z+jGAFwsCYn+vMKeesUBFCEBSqNQ1PrMLGnyAV1pGmr+rxLt2NoiIpsJ3s3/7PzKXjI+aVlVGNw0EFSFA9CP7SJB7FbSHe3sRaegesWqjbWToSQDZls78GMmQ2fWRrHIuYCbyzH6AC282jzR26qHTFYHIbSXdAPGP8fUcXw+xyiYASYHwCxnzH9wDEPD/iogu9z07O1pGGo8A3AAUdQNKh6yz6yFX2QTo/dCaCsgeJaJ/TSf0+3LfMRwgIiTl4eyBgP4FIKU6g1x3gLIJIJAZBce8lBFY1jpaNpb7juECJSjsCs7GA0dzFcM1l6ncB1B4WDHTDwCK/M9ynz+c0NxpvgDB5hL5Fe4ZaR1Ya5kqYAHUlOxv5CVKXir3+cMJXiz0cuEJd2doHF5bicokQPc77AD4KQDFOpadZstcWc7zhyWIFUBeB5l/StQRtRanLAIYEesASJG0uAHgWzJO4uU8f1hCyYqcv4M1JvKgGktTpgugGtXP2ZqP3tkZoLVTfIUTASCyW22lKT8GyJ0Hl2MKWPlJG8MASof76Q/h2NpJ4qJMAuiSFoCU7vKePTzRsiv6y5fWWs8fKIsApHSUOidAbznPHq4QkRSAvlKnsR6RWspTngUQOP2cM8p69vCGWeI4MRmVn+7WD8oigJC5pZw5Z0tah79lcDNbUYoARLTW/SZlWgDVC+TpPQM9oqxnD1MkDBQvGAQgtXeb5VkAQU9R7RMQysRynj1cIWLl5ksw/wQ1nyxSHgEc593MH3lEIFDzdu2dARQcBCCz4lzuSbxTY3HKI0DblvDbQDZoYeY/AMDYaJTVW8lrJwWVFBYMP880aj5cvjwLMEUsAG/lrOmX3UFZzrRynj8cIRpTS+UXRd6stTyVGBH0uvsjeDDz67Rynz+c0NPDTgDuAlJ5JAABB85/11qmCnQH46mcA8GE8e8ECCKsnVMQqAIy98fHnRPDb9RaprIJYCK0GPRiGubHAdwz3pOueR93o4LCc4BAABi0mpqL6zF2smwCtOwuHwF4o8CvZf5WDTENut6Ifcxx0DirVD5pqMfrIVeFJobAHexYxK9B8/zubv7NtwpKyP4qAHdhy3xLSSTpGHWZM1kRAjiG+TMQTnE3gNYI7Ksq8Z6dFfyYbSCuBIqYfzezFnbuKXXpPq8IAUbtJhsALC5l3gS4NhrlmEq8a2dEImTPATGupJsUWVAPuYCKTg8Xd9m2Igwn0S7pxlwmrdqI/ZVjhZgDILPUsL/3tjdGTAj9uV7yVYwA7ROMx4RYkXEDwcQCEME/JT5J/801DEnYvodEe9H4CICGfL8ecvmoGAFEhJq4IbhOXl6bgAkl/84P2FypdzY6Yt32bBAzgUCBQM5+ZccE4z/qKGJlVwjp2D20GMSfSlkBEvsnWp2d9hNrg0FyW3KygPcUFIjARo1r6z1vsuKLRBnCbwKwiibaPXBlvHvnWEp9qNiyhe2a5iMgRgGFvt8rII92TKr/cjlVGYC4/UPrJhF8J7NAZGChSArwrtNnP5Le9sv3rdTHotgNypIFk/dZsaPnNiou3LyyNZJsPlOJHESB8dnIyNOONNsPaRPDL+lZArgLRm4zHPOg1kn1nzdZFQKQNGMb7ZcoODy4UOQmbeGB1Mf4QBcOexPgCdtRX7l/770/qIZM1cJX33vrEgJ3Acj5eIUpgunSjM+3jIXSgdKvAVIu6pho/rI+EueiakOQYx+kDtFKPS+CVihgE9OY37cJSZYeRwpgKygX/2yvfR+rllyVwpWrVrWlm0P3EfxSqWt6enuwj4rg+jEHQrIWYOGIiaFZNRS1X1R1DHr0Q3smFR8kKLelPsCmIiW/CCiQ21u1ceM9++yTqqZ8Q8Ul7606VBx5ACIH9HfdJ9s+QSKZwJfH7Isz2ydCE68lDfOYcQ00Za6qq4W3TzQXErj5DSeOjU7KXfB7x5to6mujYq285O3VM6op32Bx4cqVrRevW30HHXmZwAH9pcN2HCSTSVATi7auB4mttJ1zGkn5QJUtAACQlB+9u371a058v6HcLsCDQv29f9/vkDUVF26AmLF0qTlp4q4XgXIjgAF9vHrb9m7E4nFoOiCBq3Y5eOasf9ijrnX+YqjJNKQL1vz3gwTL8XsOIL9xDH3Xb/c59NWKCbYDXL58eUuiPTQbxHUE9hrofbF4DD29PaCnfA2ipbl9xpPTT/hTNeUdCkrNUKkotHa2sOgw2AHDAHCBOLhg9qoVL1NkQUjSD//igGn9rt8/JJBy3qrXpojwoihwIWxnwF3ZJLA92oNYPAbCcwcAqAm7L7W54rJWADWxADNXvXyu6CLr45QHh8LnBfIHAH9mr7Vi4fTpyaHJt3yScjANiidR47MQDHqatuM46N6+DVY65X1eSLvDITShRP76wilfGDcU2aqNmlgAoOURx4muA7B3BR9qADjW24AWZZ3z2ktvQLgOwHpQNpDoFsUUHG6HSFggrRS2UzBWiMkAJgM4WFv2eA243wkcLEgkUklE473QtvaU75d+t+4n4fDPKpHgaqBmU5E/98qyIxWwBEBrrd5Zbdi2jWgiilQ6lWnpIzSomWn5NpRavsep5x65UKTfBpB6oaZz0T/70jNHEVgIuItK76ygJuKpOPr6+qC1285LAHR0ttuDhGEYS5JxOXvVrFkN+2WUmhIAAGYsXbprOGT/EoJTa/3ucqE1kbL60NeXhKOzvVzZj5oR1IAILKXU/Fc/N/tf6i3zjlBzAgBAF7vUc3+a+m2KfBv+QMkGhtYaqXQK6XQKGtnGHgDZvUcEJfKRIWr2q2d96dl6yjxQ1IUAPo578rGDofRPARxVTzmKwW3Ns5G20nBsJ6da5/dtu0Rw/b6IOKZpPmBK/GuvfO6KRD1lHwzqSgAAQFeXmnbUwV8T4Gbk9ajVGpqEdmw4jobtWND0F/MOlni4RwIlX0Fe14Ivrz33suV1E36IqD8BPBy9aFF7wkhcKZDrAI7c8R3lIRuxa2it4WjthnLaUzjg9uBBZ0c0+Tdmf79tQN229vyvNmw1b0doGAL42P/3P98lLDKHwBUASq9CBkAyc9KyR0CA4g+78U8RFE/pbod8IFrX3p2S49v9R+YYfWr3raJWi+Id737xa/dXKt31QsMRwMfej8+PGPGWM4W8nJCTgufylZ+pdWfGHuY2O9Mbh5W5z7s26M8LnhNUPgERnSTUEm2oH344+8qGa9MfKhqWAEHs/cC9BzpUZwM8i5AjBJS8guop1vPYmhD/Q4WSq3z/+sx9mcAOOQ8kCIjEQbwogkXKDP1qw5euHHYfvdopCBDEhF/dNhGOeQbEmA6NqST3hT+uQVyrIN5ai7mqFbhtvQEaeF7DD/VAJCDyJokVQi5pS4QeWfeNbzTkoJRKYacjQD46f/rTjhC2T6Pmvo7BPVsiLTPTVnp3L8pz7YK49kEJAFEQUQgZBpKp5EOEvCei36WtXtv69PJXsHBhQzbZVgs7PQHycfHa1+e+99H7t3yybQsMUVCm6e4NBaUMGMrdK1EwTmgLPSPH2/WWuZ6oUW9g7UCluMeESVCisC26zVW+KqJ8pYBnhk0sN2QMOwLAW7124rgJMAyF7dHtUEa+8gWiFLi0+tJ0dXWZranW/wXoaST2A2Q8oFs1ASF6CWyA1mtgqGXX3nbtmwIpa+TMYDH8COCNwacA43YdC2UYiMWjecp3CVFN23/H3DuOgtZfZR/PYc6qqX6gmtfCaDu4Zc4tH/0A339AaWfB3B91Ff+uQIUx7Ajgln96jT+CXTt3hRKFRDKRo3ylqjMg+o65d0zT1LeT+rgiH1FyFR5UfqYnEQA5gcQ1Do1vff9/3/SgAz236+6uDVUR1ENVh4XXBdpr6fNb9Uh0dnSivbUtR/miBKM//emKmdu7vnlX8+1zb7+X1M8LcFyxa3ag/OB5g8BsRXnzpqu7vuG2Y1YHw44AGnmZ6mV2e1s7WpubocRVvqrgavZ33nDnHnbEehHkP6FEng5C+d40MoJkK4m7v3fV937XdXlXS8UEDmDYEcAdhB2cpIFMBjc3tSLSFIGCgmFWJul3zr1lf+04ywAcUuqaISo/eM/ZMPWSrn/uqngn2fAjQGYiZnZQZiZjQURCEYTDYUgFkn7bv942UdNYDKDkyui+Ih3tIBFPIr49ju3behHdHkMiGkcqmfLGEJZSvntMk0fplP5jpS3BsAsCNfz2/azS80ugaZhw+vnYyUAw/+r5kT5JLgKwR6lrSCKZ6EOiN450n5XXNJ2FiCAUDqG5tQmGaRS1Bl5v5JG26HsBfLks4QMYfhYg4AIQcAPZET2Epi67DTTZkvw/kNJf+rTSFro3b8X2T3pgpS2IApSSopsIYFsWYj0xxKMJONRFlJ8hxKU3XHHD+eVJn8XwI4CDAqX7VoB0ewoL+v0Hiduvv/1wEVxd6nwqmUL3lm2wbAei1IA3KIFt2YhH49C2U0z5rhVxcNe1l19bkcU3hx0B3FoAkDH9QFb5edvQX6JvBYpXI/qSKWzf2gu3N1mGtEEDiUQSOmPFkBPLEHqcctS3hp6ALIYdAfwosN8p6HroBPjhdbceBsjJxc7Zlo1YT7SouTdNAy1tLRi5Swd2GdOJkbuORHtHOyLNYa9tIs81iCDdlypQvk8IDf2Nriu72srIKADDMAiEdgeBZMbp55f6TBVsaARwxLgMRchDErHeOACvFAfQ1NKElhFuGwTgDjMXTSilYIYNOBGNZCIJ7eTNTaNLKsNUOconCCFGJhKJswGUtdTMTkGALlKtXfPqNAD/SI2DQU62HbvNduwO27JUn2Ur20kry7LU9tj25va29qzSi5DA317VPdv2X/gzbRqGY5ohxzRNxzANJwRDG6Gwo5Ro7ccQ2iXP4p74nlo7gedkg06HYwJWRmeqoTrQKimWg+ZoH/bY2ocDku44RAgRaY4gnUoXkMB9FgBkle8TQYDzUCYBGno8wMy3V4wOOepqkpdCc2Kwdc+xHViOhbSVhmXbsCwLlm2hOdKMjvYRAyLA6ndWI2SGYJohhAwTZsiEaYQQMgwYIRNKVMl7NXXub13iePAenXuuY1MvTl2fQMihNzrZnYuQb5wyw9uQFxMQsZ5Iz6gFCxZYQ83jhrQAly9fHoq3hv6Flr6BYCuC0XCgJPgmPRMd+9fkbyVI4Ne34W/B6qImqHageF1c2TmK16XPdY9txRPJFE59vw8QAakhcKuF+SgMCAGCbZ2Jtk8DWDnUvG64IHDm2ytGR9vMp0h9C4FWBBVYtH6PwDEN7dXz/a2/YNCHd3tOCSumeL+ka28uQc5x/7fOvSbnnP9bZ6/76+4deLO3G45tQ2vXEkCksIqYr3xPaAdqKEvvZNBQFuDCN1ce5Nh8FOTknKgXyCn92SqeT4yAEkspvJgVCBILvqJdZQkVpJ/SOxBLMFD38PHYVnSu3Yxdxrkr6otoKDNfNQJ/DkOW8AAEZS080TAEuGjV8km2cAnJsf0rPdC5kmMN8q3DjgkQ9LVF/Tx0gbKG6u/7I046YsKxNXq2dKN9VAcMw60WBuE1D+Qo38ulsj7R2xAu4MKVK1ttMRbtUPnBEh4ovZ6pgHtbCQLowmPea7K/M//70Xtxs11g9vOuGYx70FqjOWFBKQXHthHd1gs6hCjJ2fJLPv2YxeGQA0CgQSyAHdI/BnBojtIzykUBEdwt6+c1s1WtwbiBnOAvkLmahFBDKP27gCKWYCDuIRNLUEO0xviNMYih3OBPE7FYHJHWCESy5dOthuYp382Usj44XXcCnL/qtWMAfVFW6cgov5jpz26Fbf5BYgyIBPApkK2vi9ZQEGjR7nyCASh0MO4haB2oiU+t3Yr2PtubrwA3ABQitj2GEZ0jMnMatOMUKt9N/3vl5H/dCQDoG0lIf0pHgZKZWYfHzwjvrsC5HRMAgS2TofCDQDfjd6jQgNJLXqcLSz+p8am3unHQmm6Ip3wKYJomTDMEkkhEk2gd0QLH1sWV76a/rAU060qA815/5QACJxVVfrCuj/zSr1cDXEettbhpMKFhGkoZShm7kdy3JAECJAiHwqvENNJKlCVK0gQtoaS11pahVJqEQ2aDQTORHtm04ePPQAPanUdeSCrAJZA32xiA1zTtpk3ZGq2xNHbbFENHLA13KXV3Z4hCU3MTlOFW/QiiL9EHgSql/A/m/Xbe+nJ0UFcCiHB21vT34++zv1/Q1Fc9OuW4kt8WOPn5J6+j5q3FfH7+8w4zR/3DwlmzBjUy5JITL0ym+lJNRdMDgRjeLKTMbCQBBVBwu3vd6F7c1j1R7l4BIgotrc0wTAURA6Lg9SkQiXgcyjDylQ+hLB6M7MVQVwIQ8pkB+Xv33+Phps6zFx54YL9LjruLdulCf19kGwqaWlqeTvWlTs8/rpSvcAUx3JlHohSUIZlOIFIyfh7wmngFCIVDiDRHYBjuhxX8Ucsigr5kHwjAsR33wxu+ZSFgO/avh5SIAOpGgBlLl5okDxuQvye77TAvWLQD5bvQRUt7pQhghkNzlFKnu8vDwR1lbPjTzwTK9GYgeYQQERieSVdKQLoKVJ6lMEOhzL3itQD6vy3bhm0FDJSW7HR38o17Ft5T9kJUdWsHGD1mxGSA4YzS+1OY5v2PHXLswObmO/nxQuHmVx+Hgnt/d++a1hFtK1zFGjBMw9srKNOAIe4xM2TAMN0OJsM0YZruPhQJoam5CU3NEUSaIjBDJkKmATNnM0EN9MX7PGdBQAAtWXJDcDNymrKGhrpZAEWnU2cC+P5LLIhlA32uzrcAgWfmV9OGipb2tnPSqfQ6ahrKb6wxFBQ80w13BpJpKIjhWgMRgRiScQ3im3rJNvYopdyBIOk04rGk6+cB0OsNFM96ULhs/m/nPzTkBARQNwtAjWbXDPdfWr0ofMCrgmda2IJbiVa8oWLeb+etb2tvu8Mw3dKuTAOGMlzzb7guAQToWQlluPMQTNNwJ6oayr3PUO493v0gEI8nEY8mAe2tW+S3CGdrHHFFdTkqUPqBOhLApk7nmP6suS9WggexZLse1Z/Zz/zWOj3YGkAQ9z78k7nN7S3Pi6c8w1BQRoAMyi2tlm15y8m6JTxznXL3hhjQloNksg/RnhisPivT++8vXBKsbkLj6/MenLd6qHLno24uQET3kCUGXOQ32VJPAfCHgTyXgiklG2ZyW/HK/lq3tYs9I7I18qp27AMhrvkW5dbrBf4gT0A7RFpbsC07Y+ohBB3JNj4JM41PQrdRCMH4yI2Ovzt/4fyKfm2sbhYg0dzznqZ2Csw1dY6i3A2Xzli6tGjdO4ijn37kQGoeFyjlpfvvocuefr1gwQKrKdo8zQiHV2R8u+/LM1U5wz0m2Q4dR2s4DuGPX6B46xoJAspHjvKFctv8h+ZX/DvDdSPAH/c5PUXyzR1F6poaDvWkUMj6UX/PO+LRR1tE4+daa6PfXjuPELRZkQ9V3vnEnfHUO6kjjXDoN0oJfRLkbOJ+NVOJuM2+mUFekjXzgGsNJFAddpUfEy1fuvuhu6+rhLz5qGt3sHb4VMngrzAW+NoJzy3+9bHPPj46/zkzlv7hoOZmPkvqI0r4+6wl8I8DT1UqHQteWWDN+8282Qip85VSm5SogrH+SgRQGbW7BVyyy9m5riBX+SCeduAccffCux+olKz5qOug0LOWPzdNky+WJEHxGkKC5BMAV2nNJoJTSB5LUg1ivF5PrEePX3/ppX2VTlPXJV1NCR27ztH66wKM8bPYj+Z91w5kO3cKlA++QvL78x+cv6jS8uWj7qOCz/jLM6+QPLxojaA0Cfqt35dUfMaq6Hmrzrn0m9VM14wZM8ypk6Z+nlp/EYYcQ3KseGMNCGY7izzlg3iTmk8QfODuB+9+uZqyBVF3Apz20tLPg3x4kFagaMxQ8Lv4mL6E7ah935p18Ue1TOecy+bsoWy1n7b1eACtFDokowTftwxrzY9/8ePKfwFtAKg7AQDg1Oef+i+CJw+FBIMdr6e1c/2amV+5td5pbhQ0xJhAZaqLSX4wkJKeX0vIqebtIPLXDl9s7XburHd6GwkNYQEA4JRnFx/uiDxHsqWS/j5zHFwvYk9ffc4Vm+qd1kZCwxAAAE58bvGpWusHSY6okL/3qnx6va3xmXdmfaUma+/tTGgIF+DjqWNPXQxHTSf5Tr9mv7/6feEw7WVKnOl/V35xNBQBAGDpCaeuSqfMqdD8CUlryP5e67imnjt+9IfH/93sl0ZDuYB8THviP/YRqptAfkFThwfk78FtJO+nhR+uPf+yjfVOQ6OjoQngY+qS3+8Cy/qsQ308tRxErSdr6g6SNsEerfU6ar1CQ5bYLdEn1p0+vD/yUEn8D1aIYwK+QEZVAAAAAElFTkSuQmCC",I="💡",D="🕐",z="⚕️",M='"Nunito", sans-serif',R={primary:"#4C4DDC",primaryDark:"#3A3BBD",primaryLight:"#E8EEF4",teal:"#1CC3CE",tealLight:"#E0F8F9",success:"#16a34a",successLight:"#dcfce7",error:"#dc2626",errorLight:"#fee2e2",warn:"#d97706",warnLight:"#fef3c7",text:"#1a1a1a",muted:"#666",border:"#E5E5E5",bg:"#F5F5F7",white:"#FFFFFF"};function W(e){let{children:t,color:n=R.primary,bg:o=R.primaryLight}=e;return a.default.createElement("span",{style:{display:"inline-flex",alignItems:"center",padding:"2px 10px",borderRadius:"999px",fontSize:"12px",fontWeight:700,color:n,background:o,letterSpacing:"0.5px"}},t)}function T(){return a.default.createElement(a.default.Fragment,null,a.default.createElement("style",null,"@keyframes icd-spin{to{transform:rotate(360deg)}}"),a.default.createElement("div",{style:{width:20,height:20,border:"2.5px solid #d1d5db",borderTop:`2.5px solid ${R.primary}`,borderRadius:"50%",animation:"icd-spin 0.8s linear infinite",flexShrink:0}}))}function N(e){let{text:t,label:n="Copy",copyKey:o,copiedKey:r,copy:l}=e;const i=r===o;return a.default.createElement("button",{onClick:()=>l(t,o),title:i?"Copied!":`Copy ${n}`,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 10px",fontSize:11,fontWeight:600,fontFamily:M,border:`1px solid ${i?R.success:R.border}`,borderRadius:5,background:i?R.successLight:R.white,color:i?R.success:R.muted,cursor:"pointer",transition:"all 0.15s ease",whiteSpace:"nowrap"}},i?"✓ Copied":`⎘ ${n}`)}function B(e){let{match:t,index:n,copy:o,copiedKey:r}=e;const l=`card-${n}`,i=`${t.code} — ${t.description}${t.reason?`\nNote: ${t.reason}`:""}`;return a.default.createElement("div",{style:{border:`1px solid ${R.border}`,borderRadius:10,padding:"14px 16px",background:R.white,display:"flex",flexDirection:"column",gap:6,boxShadow:"0 1px 4px rgba(0,0,0,0.06)"}},a.default.createElement("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:8}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"}},a.default.createElement(W,{color:R.primary,bg:R.primaryLight},t.code),a.default.createElement("span",{style:{fontSize:13,fontWeight:600,color:R.text,lineHeight:1.4}},t.description)),a.default.createElement(N,{text:i,label:t.code,copyKey:l,copiedKey:r,copy:o})),t.reason&&a.default.createElement("p",{style:{margin:0,fontSize:12,color:R.muted,lineHeight:1.5,paddingLeft:2}},I," ",t.reason))}function H(e){let{item:t,onClick:n}=e;return a.default.createElement("button",{onClick:()=>n(t.query),title:`Re-run: ${t.query}`,style:{padding:"4px 10px",border:`1px solid ${R.border}`,borderRadius:999,fontSize:11,fontFamily:M,color:R.muted,background:R.white,cursor:"pointer",maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",transition:"border-color 0.15s"},onMouseEnter:e=>e.currentTarget.style.borderColor=R.primary,onMouseLeave:e=>e.currentTarget.style.borderColor=R.border},D," ",t.query)}function Q(e){let{mode:t,onChange:n}=e;const o=(e,o,r)=>a.default.createElement("button",{onClick:()=>n(e),style:{flex:1,padding:"6px 0",border:"none",borderRadius:6,fontSize:12,fontWeight:700,fontFamily:M,cursor:"pointer",transition:"all 0.15s",background:t===e?R.white:"transparent",color:t===e?R.primary:"rgba(255,255,255,0.7)",boxShadow:t===e?"0 1px 4px rgba(0,0,0,0.15)":"none",display:"flex",alignItems:"center",justifyContent:"center",gap:5}},a.default.createElement("span",null,r)," ",o);return a.default.createElement("div",{style:{display:"flex",background:"rgba(255,255,255,0.15)",borderRadius:8,padding:3,gap:2,marginTop:10}},o("nlm","Quick Lookup",""),o("ai","AI Suggest",""))}function P(e){let{panelRef:n,onClose:o,mode:r,onModeChange:l}=e;const[i,d]=t.useState(""),[s,c]=t.useState([]),[p,u]=t.useState(""),[f,m]=t.useState(""),g=t.useRef(null),x=t.useRef(null);t.useEffect((()=>{setTimeout((()=>x.current?.focus()),80)}),[]);const h=t.useCallback((async e=>{if(e.length<2)return c([]),void u("");u("Searching…");try{const t=((await A(e,v.ICD_ONLY)).matches||[]).map((e=>[e.code,e.description]));c(t),u(0===t.length?"No matching codes found.":`Showing ${t.length} result${1!==t.length?"s":""}`)}catch(e){u(e.message||"Could not fetch results. Check your connection."),c([])}}),[]);return a.default.createElement("div",{ref:n,style:{position:"fixed",bottom:28,right:28,zIndex:99999,width:"min(480px, calc(100vw - 32px))",maxHeight:"calc(100vh - 56px)",display:"flex",flexDirection:"column",background:R.white,borderRadius:16,boxShadow:"0 12px 48px rgba(0,0,0,0.18)",fontFamily:M,overflow:"hidden",animation:"icd-slide-in 0.2s ease"}},a.default.createElement("style",null,"@keyframes icd-slide-in{from{opacity:0;transform:translateY(20px) scale(0.97)}to{opacity:1;transform:translateY(0) scale(1)}}"),a.default.createElement("div",{style:{background:`linear-gradient(135deg, ${R.primary} 0%, ${R.teal} 100%)`,padding:"14px 18px",flexShrink:0}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},a.default.createElement("img",{src:k,alt:"ICD-10",style:{width:32,height:32,objectFit:"contain"}}),a.default.createElement("div",null,a.default.createElement("div",{style:{color:R.white,fontWeight:700,fontSize:15,lineHeight:1.2}},"ICD-10 Coding Assistant"),a.default.createElement("div",{style:{color:"rgba(255,255,255,0.75)",fontSize:11}},"Quick ICD-10 lookup"))),a.default.createElement("button",{onClick:o,style:{background:"rgba(255,255,255,0.2)",border:"1px solid rgba(255,255,255,0.3)",borderRadius:8,color:R.white,cursor:"pointer",fontSize:18,fontWeight:"bold",width:32,height:32,display:"flex",alignItems:"center",justifyContent:"center"}},"×")),a.default.createElement(Q,{mode:r,onChange:l})),a.default.createElement("div",{style:{flex:1,overflowY:"auto",padding:"16px 18px",display:"flex",flexDirection:"column",gap:10}},a.default.createElement("input",{ref:x,type:"text",value:i,onChange:e=>{const t=e.target.value;d(t),clearTimeout(g.current),g.current=setTimeout((()=>h(t.trim())),300)},placeholder:"Type a diagnosis, e.g. diabetes, hypertension…",style:{width:"100%",padding:"10px 14px",fontSize:14,fontFamily:M,border:`1.5px solid ${R.border}`,borderRadius:8,outline:"none",boxSizing:"border-box",transition:"border-color 0.15s"},onFocus:e=>e.target.style.borderColor=R.primary,onBlur:e=>e.target.style.borderColor=R.border}),a.default.createElement("p",{style:{margin:0,fontSize:11,color:"#aaa",lineHeight:1.6,borderLeft:`3px solid ${R.border}`,paddingLeft:8}},a.default.createElement("strong",null,"Note:")," Use short, specific keywords for better results, or try"," ",a.default.createElement("button",{onClick:()=>l("ai"),style:{background:"none",border:"none",padding:0,color:R.primary,fontWeight:700,fontSize:11,cursor:"pointer",textDecoration:"underline",fontFamily:M}},"AI Suggest")," ","for broader symptom-based recommendations."),p&&s.length>0&&a.default.createElement("p",{style:{margin:0,fontSize:12,color:R.muted}},p),"No matching codes found."===p&&0===s.length&&a.default.createElement("div",{style:{background:R.warnLight,border:"1px solid #fcd34d",borderRadius:10,padding:"14px 16px",display:"flex",gap:10,alignItems:"flex-start"}},a.default.createElement("span",{style:{fontSize:18,flexShrink:0}},"🔍"),a.default.createElement("div",null,a.default.createElement("p",{style:{margin:"0 0 4px",fontSize:13,fontWeight:700,color:R.warn}},"No results found"),a.default.createElement("p",{style:{margin:0,fontSize:12,color:R.warn,lineHeight:1.6}},"We couldn't find a match. Try using more accurate keywords or switch to"," ",a.default.createElement("button",{onClick:()=>l("ai"),style:{background:"none",border:"none",padding:0,color:R.primary,fontWeight:700,fontSize:12,cursor:"pointer",textDecoration:"underline",fontFamily:M}},"AI Suggest")," ","for better results."))),a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},s.map((e=>{let[t,n]=e;return a.default.createElement("div",{key:t,onClick:()=>(e=>{navigator.clipboard.writeText(e).then((()=>{m(e),setTimeout((()=>m("")),2e3)}))})(t),style:{display:"flex",alignItems:"center",gap:12,padding:"10px 14px",border:`1px solid ${R.border}`,borderRadius:8,cursor:"pointer",background:R.white,transition:"background 0.1s"},onMouseEnter:e=>e.currentTarget.style.background=R.bg,onMouseLeave:e=>e.currentTarget.style.background=R.white},a.default.createElement("span",{style:{fontFamily:"monospace",fontSize:12,background:R.primaryLight,color:R.primary,padding:"3px 8px",borderRadius:6,whiteSpace:"nowrap",fontWeight:700}},t),a.default.createElement("span",{style:{fontSize:13,flex:1,color:R.text}},n),a.default.createElement("span",{style:{fontSize:11,color:f===t?R.success:R.muted,fontWeight:f===t?700:400}},f===t?"✓ copied":"copy"))})))),a.default.createElement("div",{style:{flexShrink:0,padding:"10px 18px",borderTop:`1px solid ${R.border}`,background:R.bg,fontSize:11,color:"#aaa",textAlign:"center"}},z," For reference only. Always verify codes with a certified medical coder."))}function L(e){let{onOpen:t}=e;return a.default.createElement("button",{onClick:t,title:"ICD-10 Coding Assistant",style:{position:"fixed",bottom:28,right:28,zIndex:99998,display:"flex",alignItems:"center",gap:8,padding:"10px 18px",borderRadius:999,border:"none",background:`linear-gradient(135deg, ${R.primary} 0%, ${R.teal} 100%)`,color:R.white,fontFamily:M,fontWeight:700,fontSize:13,cursor:"pointer",boxShadow:"0 4px 16px rgba(76,77,220,0.35)",transition:"transform 0.15s ease, box-shadow 0.15s ease"},onMouseEnter:e=>{e.currentTarget.style.transform="translateY(-2px)",e.currentTarget.style.boxShadow="0 8px 24px rgba(76,77,220,0.4)"},onMouseLeave:e=>{e.currentTarget.style.transform="translateY(0)",e.currentTarget.style.boxShadow="0 4px 16px rgba(76,77,220,0.35)"}},a.default.createElement("img",{src:k,alt:"ICD-10",style:{width:22,height:22,objectFit:"contain"}}),"ICD-10 Assistant")}function j(e){let{panelRef:t,textareaRef:n,query:o,loading:r,result:l,error:i,history:d,copy:s,copiedKey:c,onQueryChange:p,onKeyDown:u,onSubmit:f,onClear:m,onClose:g,onHistoryClick:x,mode:h,onModeChange:y}=e;const b=l?.matches?.map((e=>`${e.code} — ${e.description}`)).join("\n")||"";return a.default.createElement("div",{style:{position:"fixed",bottom:28,right:28,zIndex:99999,width:"min(480px, calc(100vw - 32px))",maxHeight:"calc(100vh - 56px)",display:"flex",flexDirection:"column",background:R.white,borderRadius:16,boxShadow:"0 12px 48px rgba(0,0,0,0.18)",fontFamily:M,overflow:"hidden",animation:"icd-slide-in 0.2s ease"},ref:t},a.default.createElement("style",null,"\n @keyframes icd-slide-in {\n from { opacity: 0; transform: translateY(20px) scale(0.97); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n "),a.default.createElement("div",{style:{background:`linear-gradient(135deg, ${R.primary} 0%, ${R.teal} 100%)`,padding:"14px 18px",flexShrink:0}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10}},a.default.createElement("img",{src:k,alt:"ICD-10",style:{width:32,height:32,objectFit:"contain"}}),a.default.createElement("div",null,a.default.createElement("div",{style:{color:R.white,fontWeight:700,fontSize:15,lineHeight:1.2}},"ICD-10 Coding Assistant"),a.default.createElement("div",{style:{color:"rgba(255,255,255,0.75)",fontSize:11}},"AI-powered · Medical coding helper"))),a.default.createElement("button",{onClick:g,style:{background:"rgba(255,255,255,0.2)",border:"1px solid rgba(255,255,255,0.3)",borderRadius:8,color:R.white,cursor:"pointer",fontSize:18,fontWeight:"bold",width:32,height:32,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0}},"×")),a.default.createElement(Q,{mode:h,onChange:y})),a.default.createElement("div",{style:{overflowY:"auto",flex:1,padding:"18px 18px 0",display:"flex",flexDirection:"column",gap:14}},a.default.createElement("p",{style:{margin:0,fontSize:13,color:R.muted,lineHeight:1.6}},"Describe a diagnosis, condition, or procedure in plain language and get relevant ICD-10 code suggestions for insurance and billing."),a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},a.default.createElement("label",{style:{fontSize:12,fontWeight:600,color:R.text},htmlFor:"icd10-query"},"Diagnosis / Condition / Procedure"),a.default.createElement("textarea",{id:"icd10-query",ref:n,value:o,onChange:p,onKeyDown:u,placeholder:"e.g. Type 2 diabetes with hypertension, chest pain on exertion, rotator cuff repair…",rows:3,style:{width:"100%",padding:"10px 12px",border:`1.5px solid ${R.border}`,borderRadius:8,fontSize:13,fontFamily:M,color:R.text,resize:"vertical",outline:"none",boxSizing:"border-box",lineHeight:1.5,transition:"border-color 0.15s"},onFocus:e=>e.target.style.borderColor=R.primary,onBlur:e=>e.target.style.borderColor=R.border}),a.default.createElement("div",{style:{fontSize:11,color:"#aaa",textAlign:"right"}},"Press ",a.default.createElement("kbd",{style:{background:"#f3f4f6",padding:"1px 5px",borderRadius:3,fontFamily:"monospace"}},"Enter")," to submit · ",a.default.createElement("kbd",{style:{background:"#f3f4f6",padding:"1px 5px",borderRadius:3,fontFamily:"monospace"}},"Shift+Enter")," for new line")),a.default.createElement("div",{style:{display:"flex",gap:8}},a.default.createElement("button",{onClick:f,disabled:!o.trim()||r,style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:8,padding:"10px 16px",background:!o.trim()||r?"#d1d5db":`linear-gradient(135deg, ${R.primary} 0%, ${R.primaryDark} 100%)`,color:R.white,border:"none",borderRadius:8,fontSize:13,fontWeight:700,fontFamily:M,cursor:!o.trim()||r?"not-allowed":"pointer",transition:"background 0.15s"}},r?a.default.createElement(a.default.Fragment,null,a.default.createElement(T,null),"Searching codes…"):"Find ICD-10 Codes"),(o||l)&&a.default.createElement("button",{onClick:m,style:{padding:"10px 14px",background:R.bg,border:`1px solid ${R.border}`,borderRadius:8,fontSize:13,fontWeight:600,fontFamily:M,color:R.muted,cursor:"pointer"}},"Clear")),i&&a.default.createElement("div",{style:{background:R.errorLight,border:"1px solid #fca5a5",borderRadius:8,padding:"10px 14px",fontSize:13,color:R.error,display:"flex",gap:8}},a.default.createElement("span",null,"⚠️"),a.default.createElement("span",null,i)),l&&a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:10}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},a.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},a.default.createElement("span",{style:{fontSize:13,fontWeight:700,color:R.text}},"Suggested Codes"),a.default.createElement(W,{color:R.teal,bg:R.tealLight},l.matches.length," match",1!==l.matches.length?"es":"")),l.matches.length>0&&a.default.createElement(N,{text:b,label:"All",copyKey:"copy-all",copiedKey:c,copy:s})),0===l.matches.length&&a.default.createElement("div",{style:{padding:"20px",textAlign:"center",color:R.muted,fontSize:13,background:R.bg,borderRadius:10}},"No matching ICD-10 codes found."),l.matches.map(((e,t)=>a.default.createElement(B,{key:t,index:t,match:e,copy:s,copiedKey:c})))),d.length>0&&a.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:6}},a.default.createElement("span",{style:{fontSize:11,fontWeight:600,color:"#aaa",textTransform:"uppercase",letterSpacing:"0.5px"}},"Recent searches"),a.default.createElement("div",{style:{display:"flex",gap:6,flexWrap:"wrap"}},d.map(((e,t)=>a.default.createElement(H,{key:t,item:e,onClick:x})))))),a.default.createElement("div",{style:{flexShrink:0,padding:"12px 18px",borderTop:`1px solid ${R.border}`,background:R.bg,fontSize:11,color:"#aaa",lineHeight:1.5,textAlign:"center"}},z," For reference only. Always verify codes with a certified medical coder. Not a substitute for clinical judgment or official coding guidelines."))}function U(){const[e,n]=t.useState(!1),[o,r]=t.useState("nlm"),[l,i]=t.useState(""),[d,s]=t.useState(!1),[c,p]=t.useState(null),[u,f]=t.useState(null),[m,g]=t.useState([]),x=t.useRef(null),h=t.useRef(null),{copy:y,copiedKey:b}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1800;const[n,o]=t.useState(null),a=t.useCallback((function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";if(navigator.clipboard)navigator.clipboard.writeText(t).then((()=>{o(n),setTimeout((()=>o(null)),e)}));else{const a=document.createElement("textarea");a.value=t,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),o(n),setTimeout((()=>o(null)),e)}}),[e]);return{copy:a,copiedKey:n}}();t.useEffect((()=>{e&&x.current&&setTimeout((()=>x.current?.focus()),80)}),[e]),t.useEffect((()=>{if(!e)return;const t=e=>{h.current&&!h.current.contains(e.target)&&n(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)}),[e]);const E=t.useCallback((async()=>{if(l.trim()&&!d){s(!0),f(null),p(null);try{const e=await A(l.trim(),v.CLAUDE_ONLY);p(e),g((t=>{const n=t.filter((e=>e.query.toLowerCase()!==l.trim().toLowerCase()));return[{query:l.trim(),matches:e.matches},...n].slice(0,3)}))}catch(e){f(e.message||"Something went wrong. Please try again.")}finally{s(!1)}}}),[l,d]),w=t.useCallback((e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),E())}),[E]),S=t.useCallback((()=>{i(""),p(null),f(null),x.current?.focus()}),[]),F=t.useCallback((e=>{i(e),p(null),f(null),x.current?.focus()}),[]),C=t.useCallback((e=>i(e.target.value)),[]);return a.default.createElement(a.default.Fragment,null,!e&&a.default.createElement(L,{onOpen:()=>n(!0)}),e&&"nlm"===o&&a.default.createElement(P,{panelRef:h,onClose:()=>n(!1),mode:o,onModeChange:r}),e&&"ai"===o&&a.default.createElement(j,{panelRef:h,textareaRef:x,query:l,loading:d,result:c,error:u,history:m,copy:y,copiedKey:b,onQueryChange:C,onKeyDown:w,onSubmit:E,onClear:S,onClose:()=>n(!1),onHistoryClick:F,mode:o,onModeChange:r}))}let Y=null;const J={showWidget:(e,t)=>{Y||(Y=document.createElement("div"),document.body.appendChild(Y)),r.default.render(a.default.createElement(a.default.Fragment,null,a.default.createElement(F,{config:e}),e.showIcdAssistant&&a.default.createElement(U,null)),Y)},closePopup:()=>{Y&&(r.default.unmountComponentAtNode(Y),Y=null)}};window.BookingSDK=J,e.AppointmentPage=F,e.ICD10Assistant=U,e.PIH_APPOINTMENT_WIDGET_CLASS=E,e.default=J,Object.defineProperty(e,"__esModule",{value:!0})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pih-appointment-widget",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "main": "dist/App.js",
5
5
  "module": "dist/App.js",
6
6
  "exports": {
package/src/App.js CHANGED
@@ -22,16 +22,18 @@ const BookingSDK = {
22
22
  document.body.appendChild(bookingWidgetInstance);
23
23
  }
24
24
 
25
- const PopupWrapper = () => {
26
- return (
27
- <>
28
- <AppointmentPage config={config} />
29
- {config.showIcdAssistant && <ICD10Assistant />}
30
- </>
31
- );
32
- };
33
-
34
- ReactDOM.render(<PopupWrapper />, bookingWidgetInstance);
25
+ // Do NOT define a component inline here. A locally-defined function creates a new
26
+ // component type reference on every showWidget call. React compares component types
27
+ // by reference; a new reference causes full unmount+remount instead of a prop update,
28
+ // resetting all state and re-running all effects — including SSO — on every call.
29
+ // Render AppointmentPage directly so React updates its props instead of remounting.
30
+ ReactDOM.render(
31
+ <>
32
+ <AppointmentPage config={config} />
33
+ {config.showIcdAssistant && <ICD10Assistant />}
34
+ </>,
35
+ bookingWidgetInstance
36
+ );
35
37
  },
36
38
 
37
39
  closePopup: () => {
@@ -98,7 +98,7 @@ class AppointmentErrorBoundary extends Component {
98
98
  }
99
99
 
100
100
  // SDK Component - accepts configuration from parent app
101
- const AppointmentPage = ({ config = {} }) => {
101
+ const AppointmentPage = ({ config = {"email":'gk.jayavenitha@powerholding.com',hospitalId: 'dMtEGhak',apiBaseUrl: 'https://afiyaapiqa.powermindinc.com',token:'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcwZmM5YzU0YjhiMjQyMWZmMTgyOTgxNTQyZmQ0NjRlOWJlYzM1NDUiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiSmF5YXZlbml0aGEgR0siLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbGl0ZWVtci0zY2M0NyIsImF1ZCI6ImxpdGVlbXItM2NjNDciLCJhdXRoX3RpbWUiOjE3NzY2ODM3ODIsInVzZXJfaWQiOiI5N3hFYjJoSFptU3pWWlFvcHM4Yzc4bzRxUHcxIiwic3ViIjoiOTd4RWIyaEhabVN6VlpRb3BzOGM3OG80cVB3MSIsImlhdCI6MTc3NjY4Mzc4MiwiZXhwIjoxNzc2Njg3MzgyLCJlbWFpbCI6ImdrLmpheWF2ZW5pdGhhQHBvd2VyaG9sZGluZy1pbnRsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJtaWNyb3NvZnQuY29tIjpbIjg2N2ViM2MyLWFlMDgtNDlkZC1hNDNhLWU0OTg2YjZlZDA5YSJdLCJlbWFpbCI6WyJnay5qYXlhdmVuaXRoYUBwb3dlcmhvbGRpbmctaW50bC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJtaWNyb3NvZnQuY29tIn19.pUN8E40VNtIqGe5bwBrZerVAgPiQJn916nOrz-uXPZkdIEOJeC5Bxrt_byRcow7CEQrlpEvpJrOZOUReJRTRjX-sIQ8feT3oSI3dBqiI2A_KzfnqUnMJj7KAVTbGwsqvHLGoChVgkL75YDs_Npz-3arOVsMwo2KaGCLkthM7NqxB1oe22kMyM35f90nXFRhpoBK1jP3Dhp9NiCVhu7XDO0mn7_SMsCIwtuL09L3TNMPOUU0yWVysKwSXbPYNS8qaISRDaami2zjErzHmFn1KLTyC-UKHv-C7h2QnDP22WjHNkjkwAxcxlvoqOGFw1V9kFv_rIGE7rt7OvxVPEbD15Q'} }) => {
102
102
  const [storedApiBaseUrl, setStoredApiBaseUrl] = useState(() => {
103
103
  try {
104
104
  return typeof localStorage !== "undefined" ? localStorage.getItem(STORAGE_KEY_API_BASE_URL) : null;
@@ -143,16 +143,25 @@ const AppointmentPage = ({ config = {} }) => {
143
143
  const prevToken = localStorage.getItem(STORAGE_KEY_ID_TOKEN);
144
144
  if (prevToken !== token) {
145
145
  // New token from parent (e.g. Flutter re-login) — clear stored credentials.
146
- // Only increment refreshLoginTrigger when there was an existing appToken to evict;
147
- // if appToken is already absent, the SSO effect will fire naturally via !appToken.
148
- const hadAppToken = !!localStorage.getItem(STORAGE_KEY_APP_TOKEN);
146
+ // Do NOT call setRefreshLoginTrigger here. App.js uses ReactDOM.render (React 17
147
+ // legacy mode) which does NOT batch setState calls inside effects. Every setState
148
+ // triggers its own synchronous render. Calling both setAppToken(null) AND
149
+ // setRefreshLoginTrigger(+1) produces two separate renders → two SSO effect
150
+ // re-runs → two login network calls. setAppToken(null) alone is sufficient:
151
+ // the SSO effect's needLogin check includes !appToken, so it fires naturally
152
+ // when appToken becomes null, with no second trigger needed.
149
153
  setAppToken(null);
150
154
  setDoctorIdFromLogin(null);
151
155
  setUserName(null);
152
- if (hadAppToken) setRefreshLoginTrigger((t) => t + 1);
153
156
  localStorage.removeItem(STORAGE_KEY_APP_TOKEN);
154
157
  localStorage.removeItem(STORAGE_KEY_DOCTOR_ID);
155
158
  localStorage.removeItem(STORAGE_KEY_USER_NAME);
159
+ // Clear any stale error state from the previous session so it doesn't
160
+ // flash the "Access Denied" popup between renders while SSO re-runs.
161
+ setTokenError(null);
162
+ setError(null);
163
+ setCallError(null);
164
+ setRedirectToHome(false);
156
165
  }
157
166
  localStorage.setItem(STORAGE_KEY_ID_TOKEN, token);
158
167
  setStoredIdToken(token);
@@ -440,10 +449,21 @@ const AppointmentPage = ({ config = {} }) => {
440
449
  const fetchAppointments = useCallback(async () => {
441
450
  console.log(appToken, 'fetchAppointments -> appToken')
442
451
  if (!appToken) {
443
- // No token availableforce SSO re-login so the next render re-fetches automatically.
444
- if (idToken && email) setRefreshLoginTrigger((t) => t + 1);
452
+ // No token in closure — SSO effect handles re-login automatically via its !appToken dep.
453
+ // Do NOT increment refreshLoginTrigger here: that would cause a second redundant SSO call
454
+ // on every token-rotation render (double-login issue during Flutter re-login).
445
455
  return;
446
456
  }
457
+ // Guard against stale-closure calls during token rotation (Flutter re-login).
458
+ // The persist effect clears localStorage APP_TOKEN synchronously before the
459
+ // state update is applied, so if the stored value no longer matches this
460
+ // closure's appToken, skip — SSO will re-run and trigger a fresh fetch.
461
+ try {
462
+ if (typeof localStorage !== "undefined") {
463
+ const currentStored = localStorage.getItem(STORAGE_KEY_APP_TOKEN);
464
+ if (currentStored !== appToken) return;
465
+ }
466
+ } catch (e) {}
447
467
  console.log(doctorIdFromLogin, 'fetchAppointments -> doctorIdFromLogin')
448
468
  const doctorId = doctorIdFromLogin;
449
469
  setLoading(true);
@@ -457,7 +477,15 @@ const AppointmentPage = ({ config = {} }) => {
457
477
  };
458
478
  const response = await getAppointmentsByStatus(activeTab, fromDate, toDate, serviceConfig);
459
479
  if (response.status === 401 || response.status === 403) {
460
- // Token expired — clear stored token and trigger re-login (SSO effect will fire)
480
+ // Token expired — only clear if this response belongs to the current token (guard against
481
+ // a stale in-flight request arriving after a fresh token was already obtained).
482
+ let isCurrentToken = true;
483
+ try {
484
+ if (typeof localStorage !== "undefined") {
485
+ isCurrentToken = localStorage.getItem(STORAGE_KEY_APP_TOKEN) === appToken;
486
+ }
487
+ } catch (e) {}
488
+ if (!isCurrentToken) return; // Fresh token already set — discard this stale 401.
461
489
  try {
462
490
  if (typeof localStorage !== "undefined") {
463
491
  localStorage.removeItem(STORAGE_KEY_APP_TOKEN);
@@ -837,6 +865,7 @@ const AppointmentPage = ({ config = {} }) => {
837
865
  if (!cancelled) {
838
866
  setTokenError(err?.message || "Authentication failed. Please try again.");
839
867
  setAppToken(null);
868
+ setRefreshLoginTrigger(0); // prevent infinite retry loop on persistent network failure
840
869
  }
841
870
  })
842
871
  .finally(() => {
@@ -928,8 +957,14 @@ const AppointmentPage = ({ config = {} }) => {
928
957
 
929
958
  let fontFamily = '"Nunito", serif';
930
959
 
931
- // Error as popup overlay (main page stays in background); auto-redirect to home
932
- const showAuthError = tokenError || (!appToken && (!idToken || !email));
960
+ // Error as popup overlay (main page stays in background); auto-redirect to home.
961
+ // When idToken + email are present but appToken is null, SSO is either running or
962
+ // about to run — suppress the popup entirely during this transient state to prevent
963
+ // a false "Access Denied" flash on every Flutter re-login.
964
+ const ssoCanRun = !!(idToken && email);
965
+ const showAuthError = tokenError
966
+ ? true // SSO explicitly failed — always show
967
+ : (!appToken && !ssoCanRun); // No credentials at all — show
933
968
  const authErrorMessage = tokenError || "Sign in required. Redirecting to home...";
934
969
  let content;
935
970
  if (tokenLoading && idToken && email) {