@rubytech/create-maxy-code 0.1.537 → 0.1.538

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +95 -7
  3. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +5 -0
  4. package/payload/platform/plugins/docs/PLUGIN.md +2 -0
  5. package/payload/platform/plugins/docs/references/admin-ui.md +14 -6
  6. package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +75 -0
  7. package/payload/platform/plugins/whatsapp/PLUGIN.md +2 -0
  8. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +17 -2
  9. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  10. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +16 -0
  11. package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +1 -1
  12. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +19 -3
  13. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  14. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +15 -2
  15. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  16. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +1 -1
  17. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  18. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts +1 -1
  19. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
  20. package/payload/platform/services/whatsapp-channel/dist/targets.js +5 -1
  21. package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
  22. package/payload/server/{chunk-44Z4ZFYS.js → chunk-FQO5RDWZ.js} +2 -0
  23. package/payload/server/{manager-AJSPM6X2.js → manager-EBZQRV5V.js} +1 -1
  24. package/payload/server/public/activity.html +5 -5
  25. package/payload/server/public/agents.html +4 -4
  26. package/payload/server/public/assets/{AdminLoginScreens-CYFf2awh.js → AdminLoginScreens-CfXQwKIY.js} +1 -1
  27. package/payload/server/public/assets/AdminLoginScreens-CfXQwKIY.js.br +0 -0
  28. package/payload/server/public/assets/AdminLoginScreens-CfXQwKIY.js.gz +0 -0
  29. package/payload/server/public/assets/AdminShell-y0_mzlDF.js +2 -0
  30. package/payload/server/public/assets/AdminShell-y0_mzlDF.js.br +0 -0
  31. package/payload/server/public/assets/AdminShell-y0_mzlDF.js.gz +0 -0
  32. package/payload/server/public/assets/{activity-BH65sm9Q.js → activity-h8-sjHz9.js} +1 -1
  33. package/payload/server/public/assets/activity-h8-sjHz9.js.br +0 -0
  34. package/payload/server/public/assets/activity-h8-sjHz9.js.gz +0 -0
  35. package/payload/server/public/assets/{admin-CQtEjRGU.js → admin-BzhhLC7C.js} +1 -1
  36. package/payload/server/public/assets/admin-BzhhLC7C.js.br +0 -0
  37. package/payload/server/public/assets/admin-BzhhLC7C.js.gz +0 -0
  38. package/payload/server/public/assets/{agents-CjhOWwl5.js → agents-DLuhIIgn.js} +1 -1
  39. package/payload/server/public/assets/agents-DLuhIIgn.js.br +0 -0
  40. package/payload/server/public/assets/agents-DLuhIIgn.js.gz +0 -0
  41. package/payload/server/public/assets/{browser-DGXpfL99.js → browser-FAnTY27n.js} +1 -1
  42. package/payload/server/public/assets/browser-FAnTY27n.js.br +0 -0
  43. package/payload/server/public/assets/browser-FAnTY27n.js.gz +0 -0
  44. package/payload/server/public/assets/{calendar-Cu4yjEuX.js → calendar-C_PkqlkQ.js} +1 -1
  45. package/payload/server/public/assets/calendar-C_PkqlkQ.js.br +0 -0
  46. package/payload/server/public/assets/calendar-C_PkqlkQ.js.gz +0 -0
  47. package/payload/server/public/assets/chat-DW81Ra89.js +1 -0
  48. package/payload/server/public/assets/chat-DW81Ra89.js.br +0 -0
  49. package/payload/server/public/assets/chat-DW81Ra89.js.gz +0 -0
  50. package/payload/server/public/assets/chevron-left-zV-WRzHb.js +1 -0
  51. package/payload/server/public/assets/chevron-left-zV-WRzHb.js.br +0 -0
  52. package/payload/server/public/assets/chevron-right-fnINU4bx.js +1 -0
  53. package/payload/server/public/assets/chevron-right-fnINU4bx.js.br +0 -0
  54. package/payload/server/public/assets/clock-2fSxBl6d.js +1 -0
  55. package/payload/server/public/assets/clock-2fSxBl6d.js.br +0 -0
  56. package/payload/server/public/assets/copy-Rde_TL9Q.js +1 -0
  57. package/payload/server/public/assets/copy-Rde_TL9Q.js.br +0 -0
  58. package/payload/server/public/assets/copy-Rde_TL9Q.js.gz +0 -0
  59. package/payload/server/public/assets/data-S5g4wIDe.js +1 -0
  60. package/payload/server/public/assets/data-S5g4wIDe.js.br +0 -0
  61. package/payload/server/public/assets/data-S5g4wIDe.js.gz +0 -0
  62. package/payload/server/public/assets/{file-text-CbQoZfJD.js → file-text-DMCUVg80.js} +1 -1
  63. package/payload/server/public/assets/file-text-DMCUVg80.js.br +0 -0
  64. package/payload/server/public/assets/file-text-DMCUVg80.js.gz +0 -0
  65. package/payload/server/public/assets/graph-Bo-WcsKS.js +51 -0
  66. package/payload/server/public/assets/graph-Bo-WcsKS.js.br +0 -0
  67. package/payload/server/public/assets/graph-Bo-WcsKS.js.gz +0 -0
  68. package/payload/server/public/assets/{graph-labels-D695CsC9.js → graph-labels-g-JodMWQ.js} +1 -1
  69. package/payload/server/public/assets/graph-labels-g-JodMWQ.js.br +0 -0
  70. package/payload/server/public/assets/graph-labels-g-JodMWQ.js.gz +0 -0
  71. package/payload/server/public/assets/operator-X_LcOnAI.js +1 -0
  72. package/payload/server/public/assets/operator-X_LcOnAI.js.br +0 -0
  73. package/payload/server/public/assets/operator-X_LcOnAI.js.gz +0 -0
  74. package/payload/server/public/assets/page-Cz0p1mBf.js +1 -0
  75. package/payload/server/public/assets/page-Cz0p1mBf.js.br +0 -0
  76. package/payload/server/public/assets/page-Cz0p1mBf.js.gz +0 -0
  77. package/payload/server/public/assets/page-Dzs3MsFL.js +32 -0
  78. package/payload/server/public/assets/page-Dzs3MsFL.js.br +0 -0
  79. package/payload/server/public/assets/page-Dzs3MsFL.js.gz +0 -0
  80. package/payload/server/public/assets/{play-CbRU6q0T.js → play-CraN5kUU.js} +1 -1
  81. package/payload/server/public/assets/play-CraN5kUU.js.br +0 -0
  82. package/payload/server/public/assets/play-CraN5kUU.js.gz +0 -0
  83. package/payload/server/public/assets/{public-CqbKJ-Q3.js → public--NUjaJ-q.js} +1 -1
  84. package/payload/server/public/assets/public--NUjaJ-q.js.br +0 -0
  85. package/payload/server/public/assets/public--NUjaJ-q.js.gz +0 -0
  86. package/payload/server/public/assets/{rotate-ccw-CjliWBou.js → rotate-ccw-DshFgg2T.js} +1 -1
  87. package/payload/server/public/assets/rotate-ccw-DshFgg2T.js.br +0 -0
  88. package/payload/server/public/assets/rotate-ccw-DshFgg2T.js.gz +0 -0
  89. package/payload/server/public/assets/routines-CfAS4gri.js +2 -0
  90. package/payload/server/public/assets/routines-CfAS4gri.js.br +0 -0
  91. package/payload/server/public/assets/routines-CfAS4gri.js.gz +0 -0
  92. package/payload/server/public/assets/{skills-ipK9BJFb.js → skills-CM6ryWpx.js} +1 -1
  93. package/payload/server/public/assets/skills-CM6ryWpx.js.br +0 -0
  94. package/payload/server/public/assets/skills-CM6ryWpx.js.gz +0 -0
  95. package/payload/server/public/assets/{tasks-CGcJHQ3X.js → tasks-B07m9LIA.js} +2 -2
  96. package/payload/server/public/assets/tasks-B07m9LIA.js.br +0 -0
  97. package/payload/server/public/assets/tasks-B07m9LIA.js.gz +0 -0
  98. package/payload/server/public/assets/{triangle-alert-CjsLPsBD.js → triangle-alert-CKHyS_gC.js} +1 -1
  99. package/payload/server/public/assets/triangle-alert-CKHyS_gC.js.br +0 -0
  100. package/payload/server/public/assets/triangle-alert-CKHyS_gC.js.gz +0 -0
  101. package/payload/server/public/assets/{useCopyFeedback-umIgCxI_.js → useCopyFeedback-CmawEsVi.js} +1 -1
  102. package/payload/server/public/assets/useCopyFeedback-CmawEsVi.js.br +0 -0
  103. package/payload/server/public/assets/useCopyFeedback-CmawEsVi.js.gz +0 -0
  104. package/payload/server/public/assets/useSubAccountSwitcher-CVHqKsqK.js +14 -0
  105. package/payload/server/public/assets/useSubAccountSwitcher-CVHqKsqK.js.br +0 -0
  106. package/payload/server/public/assets/useSubAccountSwitcher-CVHqKsqK.js.gz +0 -0
  107. package/payload/server/public/assets/{useSubAccountSwitcher-D8jXV7R5.css → useSubAccountSwitcher-yN4lhH2x.css} +1 -1
  108. package/payload/server/public/assets/useSubAccountSwitcher-yN4lhH2x.css.br +0 -0
  109. package/payload/server/public/assets/{useSubAccountSwitcher-D8jXV7R5.css.gz → useSubAccountSwitcher-yN4lhH2x.css.gz} +0 -0
  110. package/payload/server/public/assets/useVoiceRecorder-DpQTvvqD.js +2 -0
  111. package/payload/server/public/assets/useVoiceRecorder-DpQTvvqD.js.br +0 -0
  112. package/payload/server/public/assets/useVoiceRecorder-DpQTvvqD.js.gz +0 -0
  113. package/payload/server/public/assets/{wrench-DtfKfR4s.js → wrench-BPOEUNJB.js} +1 -1
  114. package/payload/server/public/assets/wrench-BPOEUNJB.js.br +0 -0
  115. package/payload/server/public/assets/wrench-BPOEUNJB.js.gz +0 -0
  116. package/payload/server/public/browser.html +4 -4
  117. package/payload/server/public/calendar.html +7 -7
  118. package/payload/server/public/chat.html +13 -13
  119. package/payload/server/public/data.html +11 -11
  120. package/payload/server/public/graph.html +9 -9
  121. package/payload/server/public/index.html +14 -14
  122. package/payload/server/public/operator.html +14 -14
  123. package/payload/server/public/public.html +13 -13
  124. package/payload/server/public/routines.html +6 -6
  125. package/payload/server/public/skills.html +5 -5
  126. package/payload/server/public/tasks.html +6 -6
  127. package/payload/server/server.js +299 -74
  128. package/payload/server/public/assets/AdminLoginScreens-CYFf2awh.js.br +0 -0
  129. package/payload/server/public/assets/AdminLoginScreens-CYFf2awh.js.gz +0 -0
  130. package/payload/server/public/assets/AdminShell-7l3ubYFZ.js +0 -2
  131. package/payload/server/public/assets/AdminShell-7l3ubYFZ.js.br +0 -0
  132. package/payload/server/public/assets/AdminShell-7l3ubYFZ.js.gz +0 -0
  133. package/payload/server/public/assets/activity-BH65sm9Q.js.br +0 -0
  134. package/payload/server/public/assets/activity-BH65sm9Q.js.gz +0 -0
  135. package/payload/server/public/assets/admin-CQtEjRGU.js.br +0 -0
  136. package/payload/server/public/assets/admin-CQtEjRGU.js.gz +0 -0
  137. package/payload/server/public/assets/agents-CjhOWwl5.js.br +0 -0
  138. package/payload/server/public/assets/agents-CjhOWwl5.js.gz +0 -0
  139. package/payload/server/public/assets/browser-DGXpfL99.js.br +0 -0
  140. package/payload/server/public/assets/browser-DGXpfL99.js.gz +0 -0
  141. package/payload/server/public/assets/calendar-Cu4yjEuX.js.br +0 -0
  142. package/payload/server/public/assets/calendar-Cu4yjEuX.js.gz +0 -0
  143. package/payload/server/public/assets/chat-0na4XVZC.js +0 -1
  144. package/payload/server/public/assets/chat-0na4XVZC.js.br +0 -0
  145. package/payload/server/public/assets/chat-0na4XVZC.js.gz +0 -0
  146. package/payload/server/public/assets/chevron-left-DHzJobWp.js +0 -1
  147. package/payload/server/public/assets/chevron-left-DHzJobWp.js.br +0 -0
  148. package/payload/server/public/assets/chevron-right-yg4DMfLT.js +0 -1
  149. package/payload/server/public/assets/chevron-right-yg4DMfLT.js.br +0 -0
  150. package/payload/server/public/assets/clock-BIDzihvp.js +0 -1
  151. package/payload/server/public/assets/clock-BIDzihvp.js.br +0 -0
  152. package/payload/server/public/assets/clock-BIDzihvp.js.gz +0 -0
  153. package/payload/server/public/assets/data-Ql9qG3YO.js +0 -1
  154. package/payload/server/public/assets/data-Ql9qG3YO.js.br +0 -0
  155. package/payload/server/public/assets/data-Ql9qG3YO.js.gz +0 -0
  156. package/payload/server/public/assets/file-text-CbQoZfJD.js.br +0 -0
  157. package/payload/server/public/assets/file-text-CbQoZfJD.js.gz +0 -0
  158. package/payload/server/public/assets/graph-7414Kjn9.js +0 -51
  159. package/payload/server/public/assets/graph-7414Kjn9.js.br +0 -0
  160. package/payload/server/public/assets/graph-7414Kjn9.js.gz +0 -0
  161. package/payload/server/public/assets/graph-labels-D695CsC9.js.br +0 -0
  162. package/payload/server/public/assets/graph-labels-D695CsC9.js.gz +0 -0
  163. package/payload/server/public/assets/maximize-2-CD0gTjW_.js +0 -1
  164. package/payload/server/public/assets/maximize-2-CD0gTjW_.js.br +0 -0
  165. package/payload/server/public/assets/maximize-2-CD0gTjW_.js.gz +0 -0
  166. package/payload/server/public/assets/operator-CLw4PZs5.js +0 -1
  167. package/payload/server/public/assets/operator-CLw4PZs5.js.br +0 -0
  168. package/payload/server/public/assets/operator-CLw4PZs5.js.gz +0 -0
  169. package/payload/server/public/assets/page-BNRFmFc-.js +0 -32
  170. package/payload/server/public/assets/page-BNRFmFc-.js.br +0 -0
  171. package/payload/server/public/assets/page-BNRFmFc-.js.gz +0 -0
  172. package/payload/server/public/assets/page-BRr295G2.js +0 -1
  173. package/payload/server/public/assets/page-BRr295G2.js.br +0 -0
  174. package/payload/server/public/assets/page-BRr295G2.js.gz +0 -0
  175. package/payload/server/public/assets/play-CbRU6q0T.js.br +0 -0
  176. package/payload/server/public/assets/play-CbRU6q0T.js.gz +0 -0
  177. package/payload/server/public/assets/public-CqbKJ-Q3.js.br +0 -0
  178. package/payload/server/public/assets/public-CqbKJ-Q3.js.gz +0 -0
  179. package/payload/server/public/assets/rotate-ccw-CjliWBou.js.br +0 -0
  180. package/payload/server/public/assets/rotate-ccw-CjliWBou.js.gz +0 -0
  181. package/payload/server/public/assets/routines-yJuRuBfn.js +0 -2
  182. package/payload/server/public/assets/routines-yJuRuBfn.js.br +0 -0
  183. package/payload/server/public/assets/routines-yJuRuBfn.js.gz +0 -0
  184. package/payload/server/public/assets/skills-ipK9BJFb.js.br +0 -0
  185. package/payload/server/public/assets/skills-ipK9BJFb.js.gz +0 -0
  186. package/payload/server/public/assets/tasks-CGcJHQ3X.js.br +0 -0
  187. package/payload/server/public/assets/tasks-CGcJHQ3X.js.gz +0 -0
  188. package/payload/server/public/assets/triangle-alert-CjsLPsBD.js.br +0 -0
  189. package/payload/server/public/assets/triangle-alert-CjsLPsBD.js.gz +0 -0
  190. package/payload/server/public/assets/useCopyFeedback-umIgCxI_.js.br +0 -0
  191. package/payload/server/public/assets/useCopyFeedback-umIgCxI_.js.gz +0 -0
  192. package/payload/server/public/assets/useSubAccountSwitcher-D8jXV7R5.css.br +0 -0
  193. package/payload/server/public/assets/useSubAccountSwitcher-UMg53kKF.js +0 -14
  194. package/payload/server/public/assets/useSubAccountSwitcher-UMg53kKF.js.br +0 -0
  195. package/payload/server/public/assets/useSubAccountSwitcher-UMg53kKF.js.gz +0 -0
  196. package/payload/server/public/assets/useVoiceRecorder-tzfqfXni.js +0 -2
  197. package/payload/server/public/assets/useVoiceRecorder-tzfqfXni.js.br +0 -0
  198. package/payload/server/public/assets/useVoiceRecorder-tzfqfXni.js.gz +0 -0
  199. package/payload/server/public/assets/wrench-DtfKfR4s.js.br +0 -0
  200. package/payload/server/public/assets/wrench-DtfKfR4s.js.gz +0 -0
@@ -1 +1 @@
1
- import{o as e}from"./chunk-CltuBf4Z.js";import{J as t,W as n,X as r,j as i,k as a,v as o}from"./useSubAccountSwitcher-UMg53kKF.js";import{k as s,m as c,t as l}from"./AdminShell-7l3ubYFZ.js";var u=t(),d=e(r(),1),f=n();function p(){let[e,t]=(0,d.useState)(null),[n,r]=(0,d.useState)(!1),[u,p]=(0,d.useState)(void 0),[m,h]=(0,d.useState)(null),[g,_]=(0,d.useState)(void 0),[v,y]=(0,d.useState)(null),[b,x]=(0,d.useState)(null);(0,d.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!n){t(null),r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(async i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`;return}if(i.ok)try{let e=await i.json();typeof e.businessName==`string`&&p(e.businessName),e.sessionId!==void 0&&h(e.sessionId??null),x(e.role??null),_(e.userName===void 0?null:e.userName),y(e.avatar??null)}catch{}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]);let S=(0,d.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]),[C,w]=(0,d.useState)(!1),T=(0,d.useCallback)(async()=>{w(!0);try{let e=await s();if(e){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`}return e}finally{w(!1)}},[]);return n?e?(0,f.jsx)(o,{cacheKey:e,surface:`browser`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=browser`);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},children:(0,f.jsx)(l,{cacheKey:e,businessName:u,sessionId:m,onLogout:S,onDisconnect:T,disconnecting:C,userName:g,userAvatar:v,role:b,children:(0,f.jsxs)(`div`,{className:`data-page`,children:[(0,f.jsx)(`header`,{className:`data-header`,children:(0,f.jsxs)(`h1`,{className:`data-title`,children:[(0,f.jsx)(i,{size:18}),` Browser`]})}),(0,f.jsx)(c,{})]})})}):(0,f.jsxs)(`div`,{className:`data-page`,children:[(0,f.jsx)(`header`,{className:`data-header`,children:(0,f.jsxs)(`h1`,{className:`data-title`,children:[(0,f.jsx)(i,{size:18}),` Browser`]})}),(0,f.jsxs)(`div`,{className:`data-empty`,children:[(0,f.jsx)(`p`,{children:`You are not signed in.`}),(0,f.jsxs)(`p`,{children:[`Open the `,(0,f.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})]}):(0,f.jsx)(`div`,{className:`data-page`,children:(0,f.jsxs)(`div`,{className:`data-loading`,children:[(0,f.jsx)(a,{size:18,className:`spin`}),` Loading…`]})})}(0,u.createRoot)(document.getElementById(`root`)).render((0,f.jsx)(p,{}));
1
+ import{o as e}from"./chunk-CltuBf4Z.js";import{A as t,G as n,M as r,Y as i,Z as a,v as o}from"./useSubAccountSwitcher-CVHqKsqK.js";import{A as s,m as c,t as l}from"./AdminShell-y0_mzlDF.js";var u=i(),d=e(a(),1),f=n();function p(){let[e,n]=(0,d.useState)(null),[i,a]=(0,d.useState)(!1),[u,p]=(0,d.useState)(void 0),[m,h]=(0,d.useState)(null),[g,_]=(0,d.useState)(void 0),[v,y]=(0,d.useState)(null),[b,x]=(0,d.useState)(null);(0,d.useEffect)(()=>{let e=!1,t=null;try{t=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!t){n(null),a(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(t)}`).then(async r=>{if(!e){if(r.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`;return}if(r.ok)try{let e=await r.json();typeof e.businessName==`string`&&p(e.businessName),e.sessionId!==void 0&&h(e.sessionId??null),x(e.role??null),_(e.userName===void 0?null:e.userName),y(e.avatar??null)}catch{}n(t),a(!0)}}).catch(()=>{e||(n(t),a(!0))}),()=>{e=!0}},[]);let S=(0,d.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]),[C,w]=(0,d.useState)(!1),T=(0,d.useCallback)(async()=>{w(!0);try{let e=await s();if(e){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`}return e}finally{w(!1)}},[]);return i?e?(0,f.jsx)(o,{cacheKey:e,surface:`browser`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=browser`);try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},children:(0,f.jsx)(l,{cacheKey:e,businessName:u,sessionId:m,onLogout:S,onDisconnect:T,disconnecting:C,userName:g,userAvatar:v,role:b,children:(0,f.jsxs)(`div`,{className:`data-page`,children:[(0,f.jsx)(`header`,{className:`data-header`,children:(0,f.jsxs)(`h1`,{className:`data-title`,children:[(0,f.jsx)(r,{size:18}),` Browser`]})}),(0,f.jsx)(c,{})]})})}):(0,f.jsxs)(`div`,{className:`data-page`,children:[(0,f.jsx)(`header`,{className:`data-header`,children:(0,f.jsxs)(`h1`,{className:`data-title`,children:[(0,f.jsx)(r,{size:18}),` Browser`]})}),(0,f.jsxs)(`div`,{className:`data-empty`,children:[(0,f.jsx)(`p`,{children:`You are not signed in.`}),(0,f.jsxs)(`p`,{children:[`Open the `,(0,f.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})]}):(0,f.jsx)(`div`,{className:`data-page`,children:(0,f.jsxs)(`div`,{className:`data-loading`,children:[(0,f.jsx)(t,{size:18,className:`spin`}),` Loading…`]})})}(0,u.createRoot)(document.getElementById(`root`)).render((0,f.jsx)(p,{}));
@@ -1 +1 @@
1
- import{o as e}from"./chunk-CltuBf4Z.js";import{E as t,J as n,N as r,T as i,W as a,X as o,_ as s,b as c,k as l,q as u,v as d,x as f,z as p}from"./useSubAccountSwitcher-UMg53kKF.js";import{k as m,t as h,x as g}from"./AdminShell-7l3ubYFZ.js";import{t as _}from"./chevron-left-DHzJobWp.js";import{t as v}from"./chevron-right-yg4DMfLT.js";import{t as y}from"./clock-BIDzihvp.js";var b=p(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),x=p(`map-pin`,[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]),S=p(`sticky-note`,[[`path`,{d:`M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z`,key:`1dfntj`}],[`path`,{d:`M15 3v5a1 1 0 0 0 1 1h5`,key:`6s6qgf`}]]),C=p(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),w=p(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),T=n(),E=e(o(),1);function D(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function O(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function k(e){let t=D(e),n=t.getDay();return O(t,n===0?-6:1-n)}function A(e,t){switch(e){case`day`:{let e=D(t);return{from:e,to:O(e,1)}}case`week`:{let e=k(t);return{from:e,to:O(e,7)}}case`month`:return{from:new Date(t.getFullYear(),t.getMonth(),1),to:new Date(t.getFullYear(),t.getMonth()+1,1)};case`year`:return{from:new Date(t.getFullYear(),0,1),to:new Date(t.getFullYear()+1,0,1)}}}function j(e,t,n){switch(e){case`day`:return O(t,n);case`week`:return O(t,n*7);case`month`:return new Date(t.getFullYear(),t.getMonth()+n,1);case`year`:return new Date(t.getFullYear()+n,t.getMonth(),1)}}function M(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}var ee=[`day`,`week`,`month`,`year`],N=`month`;function P(e){return e.toLocaleDateString([],{day:`numeric`,month:`short`})}function F(e){return e.toLocaleDateString([],{day:`numeric`,month:`short`,year:`numeric`})}function te(e,t){switch(e){case`day`:return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});case`week`:{let{from:e,to:n}=A(`week`,t);return`${P(e)} – ${F(new Date(n.getTime()-1))}`}case`month`:return t.toLocaleDateString([],{month:`long`,year:`numeric`});case`year`:return String(t.getFullYear())}}function I(e,t){return{role:`button`,tabIndex:0,onClick:()=>t(e),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t(e))}}}var L=a(),R={meeting:`Meeting`,event:`Event`,task:`Task`};function z(e){return R[e.kind??`meeting`]}function B(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function V(e){if(e.isAllDay)return`All day`;let t=B(new Date(e.startsAt));return e.endsAt?`${t} – ${B(new Date(e.endsAt))}`:t}function H(e){if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}function ne(e){let t=new Date(e.startsAt);if(e.isAllDay)return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});let n=t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),r=B(t);return e.endsAt?`${n} · ${r} – ${B(new Date(e.endsAt))}`:`${n} · ${r}`}function re(e,t){return e.email??`${e.name??`unknown`}-${t}`}function U(e){return e.map(e=>e.name||e.email||`Unknown`).join(`, `)}function W({a:e}){let t=e.name||e.email||`Unknown`,n=e.name&&e.email?e.email:null;return(0,L.jsxs)(`span`,{className:`cal-attendee-lines`,children:[(0,L.jsx)(`span`,{className:`cal-attendee-name`,children:t}),n&&(0,L.jsx)(`span`,{className:`cal-attendee-email`,children:n})]})}function G(e){let t=[...e].sort((e,t)=>e.start.localeCompare(t.start)),n=[];for(let e of t){let t=n[n.length-1];t&&t.end===e.start?(t.end=e.end,t.slots+=1):n.push({start:e.start,end:e.end,slots:1})}return n}function K(e){let t=e.slots===1?`slot`:`slots`;return`free ${B(new Date(e.start))} – ${B(new Date(e.end))} · ${e.slots} ${t}`}function q(e,t,n,r=[]){let i=D(t),a=[];for(let t=0;t<n;t++){let n=O(i,t),o=e.filter(e=>M(new Date(e.startsAt),n)).sort((e,t)=>e.startsAt.localeCompare(t.startsAt)),s=r.some(e=>M(new Date(e.start),n));(o.length>0||s)&&a.push({day:n,meetings:o})}return a}function J(e,t){return Math.round((D(t).getTime()-D(e).getTime())/864e5)}function Y(e,t){let n=e.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`});return M(e,t)?`${n} · today`:n}function ie({from:e,to:t,meetings:n,stretches:r,gapSource:i,showAllKinds:a,onToggleKinds:o,onSelect:s,onAddAt:c}){let l=a?n:n.filter(e=>(e.kind??`meeting`)===`meeting`),u=n.length-l.length,d=q(l,e,J(e,t),r),f=new Date,p=(0,L.jsxs)(`div`,{className:`cal-list-controls`,children:[(0,L.jsx)(`button`,{type:`button`,className:`cal-kind-toggle${a?` cal-kind-toggle-on`:``}`,onClick:o,"aria-pressed":a,children:a?`Meetings only`:`Show reminders and tasks`}),u>0&&(0,L.jsxs)(`span`,{className:`cal-hidden-count`,children:[u,` hidden`]}),i===`none`&&(0,L.jsx)(`span`,{className:`cal-no-hours`,children:`Free time is not shown: working hours are not set.`})]});return d.length===0?(0,L.jsxs)(`div`,{className:`cal-schedule`,children:[p,(0,L.jsx)(`div`,{className:`cal-schedule-empty`,children:`No events in this period.`})]}):(0,L.jsxs)(`div`,{className:`cal-schedule`,children:[p,d.map(e=>{let t=r.filter(t=>M(new Date(t.start),e.day));return(0,L.jsxs)(`section`,{className:`cal-sched-group`,children:[(0,L.jsx)(`h3`,{className:`cal-sched-day${M(e.day,f)?` cal-sched-day-today`:``}`,children:Y(e.day,f)}),e.meetings.map(e=>{let t=[e.location,U(e.attendees)||null,z(e)].filter(Boolean);return(0,L.jsxs)(`div`,{className:`cal-sched-row`,"data-testid":`row-${e.meetingId}`,"data-meeting-id":e.meetingId,"data-kind":e.kind??`meeting`,...I(e,s),children:[(0,L.jsx)(`span`,{className:`cal-sched-time`,children:V(e)}),(0,L.jsxs)(`span`,{className:`cal-sched-detail`,children:[(0,L.jsx)(`span`,{className:`cal-sched-title`,children:e.title??`Untitled`}),(0,L.jsx)(`span`,{className:`cal-sched-meta`,children:t.join(` · `)})]})]},e.meetingId)}),t.map(e=>(0,L.jsx)(`button`,{type:`button`,className:`cal-gap`,"data-gap-start":e.start,onClick:()=>c(e.start,e.end),children:K(e)},e.start))]},e.day.toISOString())})]})}function X({initialStart:e,initialEnd:t,adminFetch:n,onClose:r,onCreated:i}){let[a,o]=(0,E.useState)(``),[s,u]=(0,E.useState)(e),[d,f]=(0,E.useState)(t),[p,m]=(0,E.useState)(``),[h,g]=(0,E.useState)(``),[_,v]=(0,E.useState)(!1),[y,b]=(0,E.useState)(null),x=(0,E.useCallback)(async()=>{if(!a.trim()){b(`Title is required`);return}if(!s){b(`Start time is required`);return}v(!0),b(null);try{let e=await n(`/api/admin/calendar/meetings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({title:a.trim(),startsAt:new Date(s).toISOString(),endsAt:d?new Date(d).toISOString():null,location:p.trim()||null,privateNote:h.trim()||null})}),t=await e.json();if(!e.ok){b(t.error??`Create failed (HTTP ${e.status})`);return}t.meeting&&i(t.meeting)}catch(e){b(e instanceof Error?e.message:`Create failed`)}finally{v(!1)}},[a,s,d,p,h,n,i]);return(0,L.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{_||r()},children:(0,L.jsxs)(`div`,{className:`cal-modal cal-modal-wide`,role:`dialog`,"aria-modal":`true`,"aria-label":`Add meeting`,onClick:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,L.jsx)(`span`,{className:`cal-modal-kind`,children:`New meeting`}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:r,"aria-label":`Close`,disabled:_,children:(0,L.jsx)(c,{size:16})})]}),(0,L.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Title`}),(0,L.jsx)(`input`,{type:`text`,value:a,onChange:e=>o(e.target.value),disabled:_,autoFocus:!0})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Starts`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:s,onChange:e=>u(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Ends`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:d,onChange:e=>f(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Location`}),(0,L.jsx)(`input`,{type:`text`,value:p,onChange:e=>m(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Private note`}),(0,L.jsx)(`textarea`,{value:h,onChange:e=>g(e.target.value),disabled:_,rows:2})]}),y&&(0,L.jsx)(`div`,{className:`cal-modal-error`,children:y})]}),(0,L.jsxs)(`div`,{className:`cal-modal-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:r,disabled:_,children:`Cancel`}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:x,disabled:_,children:[_?(0,L.jsx)(l,{size:14,className:`spin`}):null,` Create`]})]})]})})}function ae(e){return new Date(e).toISOString()}function Z(e){return Math.floor(new Date(e).getTime()/6e4)}function oe(e){if(!e)return null;let t=e.match(/filename="([^"]+)"/);return t?t[1]:null}function Q({meeting:e,adminFetch:n,onClose:i,onSaved:a,onDeleted:o}){let s=e.kind===`meeting`,[u,d]=(0,E.useState)(!1),[p,m]=(0,E.useState)(!1),[h,g]=(0,E.useState)(!1),[_,v]=(0,E.useState)(!1),[T,D]=(0,E.useState)(null),[O,k]=(0,E.useState)(e),[A,j]=(0,E.useState)(e.title??``),[M,ee]=(0,E.useState)(H(e.startsAt)),[N,P]=(0,E.useState)(e.endsAt?H(e.endsAt):``),[F,te]=(0,E.useState)(e.location??``),[I,z]=(0,E.useState)(e.privateNote??``),[B,V]=(0,E.useState)(``),[U,G]=(0,E.useState)(``);(0,E.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!_&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[_,i]);let K=(0,E.useCallback)(()=>{let e={},t=A.trim();t!==(O.title??``)&&(e.title=t);let n=ae(M);Z(n)!==Z(O.startsAt)&&(e.startsAt=n);let r=N?ae(N):null;(r===null?O.endsAt!==null:O.endsAt===null||Z(r)!==Z(O.endsAt))&&(e.endsAt=r);let i=F.trim()||null;i!==(O.location??null)&&(e.location=i);let a=I.trim()||null;return a!==(O.privateNote??null)&&(e.privateNote=a),e},[A,M,N,F,I,O]),q=(0,E.useCallback)(async()=>{let t=K();if(Object.keys(t).length===0){d(!1);return}v(!0),D(null);try{let r=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();k(i.meeting),a(i.meeting),d(!1)}catch(e){D(e instanceof Error?e.message:`Save failed`)}finally{v(!1)}},[n,K,e.meetingId,a]),J=(0,E.useCallback)(async()=>{let t=B.trim(),r=U.trim();if(!(!t&&!r)){v(!0),D(null);try{let i=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/attendees`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:t||void 0,email:r||void 0})});if(!i.ok)throw Error(`HTTP ${i.status}`);let o=await i.json();k(o.meeting),a(o.meeting),V(``),G(``)}catch(e){D(e instanceof Error?e.message:`Add failed`)}finally{v(!1)}}},[n,B,U,e.meetingId,a]),Y=(0,E.useCallback)(async t=>{let r=t.email?{email:t.email}:{name:t.name};v(!0),D(null);try{let t=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/attendees`,{method:`DELETE`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!t.ok)throw Error(`HTTP ${t.status}`);let i=await t.json();k(i.meeting),a(i.meeting)}catch(e){D(e instanceof Error?e.message:`Remove failed`)}finally{v(!1)}},[n,e.meetingId,a]),ie=(0,E.useCallback)(async()=>{v(!0),D(null);try{let t=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);o(e.meetingId)}catch(e){D(e instanceof Error?e.message:`Delete failed`),v(!1)}},[n,e.meetingId,o]),X=(0,E.useCallback)(async t=>{g(!1),v(!0),D(null);try{let r=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/ics?attendees=${t?`1`:`0`}`);if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.blob(),a=oe(r.headers.get(`content-disposition`))??`meeting.ics`,o=URL.createObjectURL(i),s=document.createElement(`a`);s.href=o,s.download=a,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(o)}catch(e){D(e instanceof Error?e.message:`Download failed`)}finally{v(!1)}},[n,e.meetingId]),Q=R[e.kind??`meeting`],se=B.trim().length>0||U.trim().length>0;return(0,L.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{_||i()},children:(0,L.jsxs)(`div`,{className:`cal-modal cal-modal-wide`,role:`dialog`,"aria-modal":`true`,"aria-label":u?`Edit meeting`:`Meeting detail`,onClick:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,L.jsx)(`span`,{className:`cal-modal-kind`,children:Q}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:i,"aria-label":`Close`,autoFocus:!0,disabled:_,children:(0,L.jsx)(c,{size:16})})]}),!u&&(0,L.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,L.jsx)(`div`,{className:`cal-modal-title`,children:O.title??`Untitled`}),(0,L.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,L.jsx)(y,{size:14}),(0,L.jsx)(`span`,{children:ne(O)})]}),O.location&&(0,L.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,L.jsx)(x,{size:14}),(0,L.jsx)(`span`,{children:O.location})]}),O.attendees.length>0&&(0,L.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,L.jsx)(w,{size:14}),(0,L.jsx)(`div`,{className:`cal-modal-attendees`,children:O.attendees.map((e,t)=>(0,L.jsx)(`div`,{className:`cal-attendee-row`,children:(0,L.jsx)(W,{a:e})},re(e,t)))})]}),O.privateNote&&(0,L.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,L.jsx)(S,{size:14}),(0,L.jsx)(`span`,{className:`cal-modal-note`,children:O.privateNote})]}),(0,L.jsxs)(`div`,{className:`cal-modal-row cal-modal-meta`,children:[(0,L.jsx)(b,{size:14}),(0,L.jsx)(`span`,{children:Q})]})]}),u&&(0,L.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Title`}),(0,L.jsx)(`input`,{type:`text`,value:A,onChange:e=>j(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Start`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:M,onChange:e=>ee(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`End`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:N,onChange:e=>P(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Location`}),(0,L.jsx)(`input`,{type:`text`,value:F,onChange:e=>te(e.target.value),disabled:_})]}),(0,L.jsxs)(`div`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Attendees`}),(0,L.jsxs)(`div`,{className:`cal-modal-attendees cal-modal-attendees-edit`,children:[O.attendees.length===0&&(0,L.jsx)(`div`,{className:`cal-attendee-empty`,children:`No attendees yet.`}),O.attendees.map((e,t)=>(0,L.jsxs)(`div`,{className:`cal-attendee-row cal-attendee-row-edit`,children:[(0,L.jsx)(W,{a:e}),(0,L.jsx)(`button`,{type:`button`,className:`cal-attendee-remove`,onClick:()=>Y(e),disabled:_,"aria-label":`Remove ${e.name||e.email||`attendee`}`,children:(0,L.jsx)(c,{size:13})})]},re(e,t)))]}),(0,L.jsxs)(`div`,{className:`cal-attendee-add`,children:[(0,L.jsx)(`input`,{type:`text`,placeholder:`Name`,value:B,onChange:e=>V(e.target.value),disabled:_,"aria-label":`Attendee name`}),(0,L.jsx)(`input`,{type:`email`,placeholder:`Email`,value:U,onChange:e=>G(e.target.value),disabled:_,"aria-label":`Attendee email`}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn cal-attendee-add-btn`,onClick:J,disabled:_||!se,"aria-label":`Add attendee`,children:_?(0,L.jsx)(l,{size:13,className:`spin`}):(0,L.jsx)(C,{size:13})})]})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Private note`}),(0,L.jsx)(`textarea`,{className:`cal-modal-textarea`,value:I,onChange:e=>z(e.target.value),disabled:_,rows:3,placeholder:`Only you and your team can see this.`})]})]}),T&&(0,L.jsx)(`div`,{className:`cal-modal-error`,children:T}),s&&(0,L.jsxs)(`div`,{className:`cal-modal-actions`,children:[!u&&!p&&!h&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>d(!0),disabled:_,children:[(0,L.jsx)(t,{size:14}),` Edit`]}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:()=>m(!0),disabled:_,children:[(0,L.jsx)(f,{size:14}),` Delete`]}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-download`,onClick:()=>{O.attendees.length>0?g(!0):X(!1)},disabled:_,children:[_?(0,L.jsx)(l,{size:14,className:`spin`}):(0,L.jsx)(r,{size:14}),` Download`]})]}),h&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Include attendees in the file?`}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:()=>X(!0),disabled:_,children:[_?(0,L.jsx)(l,{size:14,className:`spin`}):null,` Yes`]}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>X(!1),disabled:_,children:`No`}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>g(!1),disabled:_,children:`Cancel`})]}),u&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:q,disabled:_,children:[_?(0,L.jsx)(l,{size:14,className:`spin`}):null,` Save`]}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>{d(!1),D(null)},disabled:_,children:`Cancel`})]}),p&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Delete this meeting?`}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:ie,disabled:_,children:[_?(0,L.jsx)(l,{size:14,className:`spin`}):null,` Delete`]}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>m(!1),disabled:_,children:`Cancel`})]})]})]})})}var se=8;function ce(e,t){return t?{op:`view-census`,range:e,nodes:t.nodes.length,clippedV:t.nodes.filter(e=>e.clippedV).length,clippedH:t.nodes.filter(e=>e.clippedH).length,hidden:t.hidden,fields:t.fields.length>0?t.fields.join(`,`):`-`,minBlockPx:t.minBlockPx??`-`,lineBoxPx:t.lineBoxPx??`-`,gapSource:t.gapSource??`-`,gaps:t.gaps??`-`,shownKinds:t.shownKinds??`-`,hiddenKinds:t.hiddenKinds??`-`,source:`measured`}:{op:`view-census`,range:e,nodes:`-`,clippedV:`-`,clippedH:`-`,hidden:`-`,fields:`-`,minBlockPx:`-`,lineBoxPx:`-`,gapSource:`-`,gaps:`-`,shownKinds:`-`,hiddenKinds:`-`,source:`unavailable`}}var le=5;function ue(e,t){if(!t)return[];let n=[];for(let r of t.nodes)for(let t of[`v`,`h`])(t===`v`?r.clippedV:r.clippedH)&&n.push({op:`node-clipped`,view:e,meetingId:r.meetingId,axis:t,renderedPx:r.renderedPx,neededPx:r.neededPx,durationMin:r.durationMin??`-`});if(n.length<=le)return n;let r=n.slice(0,le);return r[r.length-1]={...r[r.length-1],truncated:n.length-le},r}function de(e){let t=(e.textContent??``).length;if(t===0||e.scrollWidth===0||e.clientWidth>=e.scrollWidth-1)return!0;let n=e.scrollWidth/t;return e.clientWidth/n>=se}function fe(e){if(!e||typeof window>`u`||typeof window.getComputedStyle!=`function`)return null;let t=Array.from(e.querySelectorAll(`[data-meeting-id]`)),n=t.map(e=>e.getBoundingClientRect());if(t.length>0&&n.every(e=>e.height===0&&e.width===0))return null;let r=t.length>0?parseFloat(window.getComputedStyle(t[0]).lineHeight):null,i=t.map((e,t)=>{let r=e.querySelector(`.cal-sched-title`),i=e.querySelector(`.cal-event-title`)??r??e,a=i.scrollWidth>i.clientWidth+1,o=e.getAttribute(`data-duration-min`);return{meetingId:e.getAttribute(`data-meeting-id`)??`unknown`,clippedV:e.scrollHeight>e.clientHeight+1,clippedH:r?a:a&&!de(i),durationMin:o?Number(o):null,renderedPx:Math.round(n[t].height*10)/10,neededPx:Math.round(e.scrollHeight*10)/10}}),a=[];e.querySelector(`.cal-event-title, .cal-chip, .cal-sched-title`)&&a.push(`title`),e.querySelector(`.cal-event-time, .cal-sched-time`)&&a.push(`time`),e.querySelector(`.cal-sched-meta`)&&a.push(`meta`);let o=0;for(let t of Array.from(e.querySelectorAll(`.cal-more`)))o+=Number(t.getAttribute(`data-hidden-count`)??0);return{nodes:i,hidden:o,fields:a,minBlockPx:i.length>0?Math.min(...i.map(e=>e.renderedPx)):null,lineBoxPx:Number.isFinite(r)?r:null}}function pe(e,t){for(let n of[ce(e,t),...ue(e,t)])try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`event`,source:`calendar-legibility`,...n}),keepalive:!0}).catch(()=>{})}catch{}}var $=`maxy-admin-session-key`,me=`maxy-calendar-show-all-kinds`;function he(){let[e,t]=(0,E.useState)(null),[n,r]=(0,E.useState)(!1),[i,a]=(0,E.useState)(void 0),[o,c]=(0,E.useState)(null),[l,u]=(0,E.useState)(void 0),[f,p]=(0,E.useState)(null),[g,_]=(0,E.useState)(null);(0,E.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem($)}catch{}if(!n){r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(async i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`;return}if(i.ok)try{let e=await i.json();typeof e.businessName==`string`&&a(e.businessName),e.sessionId!==void 0&&c(e.sessionId??null),_(e.role??null),u(e.userName===void 0?null:e.userName),p(e.avatar??null)}catch{}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]);let v=(0,E.useCallback)(()=>{try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},[]),[y,b]=(0,E.useState)(!1),x=(0,E.useCallback)(async()=>{b(!0);try{let e=await m();if(e){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`}return e}finally{b(!1)}},[]);return n?e?(0,L.jsx)(d,{cacheKey:e,surface:`calendar`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=calendar`);try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},children:(0,L.jsx)(h,{cacheKey:e,businessName:i,sessionId:o,onLogout:v,onDisconnect:x,disconnecting:y,userName:l,userAvatar:f,role:g,children:(0,L.jsx)(ge,{cacheKey:e})})}):(0,L.jsx)(`div`,{className:`cal-page`,children:(0,L.jsxs)(`div`,{className:`cal-empty`,children:[(0,L.jsx)(`p`,{children:`You are not signed in.`}),(0,L.jsxs)(`p`,{children:[`Open the `,(0,L.jsx)(`a`,{href:`/`,className:`cal-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,L.jsx)(s,{surface:`gate`})}function ge({cacheKey:e}){let{adminFetch:t,sessionRefetchNonce:n}=u({initialCacheKey:e,surface:`calendar`}),[r,a]=(0,E.useState)(N),[o,c]=(0,E.useState)(()=>new Date),[d,f]=(0,E.useState)([]),[p,m]=(0,E.useState)(!1),[h,y]=(0,E.useState)(!1),[b,x]=(0,E.useState)(null),[S,C]=(0,E.useState)(null),[w,T]=(0,E.useState)([]),[D,O]=(0,E.useState)(`none`),[k,M]=(0,E.useState)(()=>{try{return sessionStorage.getItem(me)===`1`}catch{return!1}}),[P,F]=(0,E.useState)(null),[I,R]=(0,E.useState)(0),[z,B]=(0,E.useState)(null);(0,E.useEffect)(()=>{let e=!1;return t(`/api/admin/calendar/booking-link`).then(async t=>{if(e||!t.ok)return;let n=await t.json();typeof n.bookingDomain==`string`&&n.bookingDomain&&B(n.bookingDomain)}).catch(()=>{}),()=>{e=!0}},[t]),(0,E.useEffect)(()=>{let e=!1,{from:n,to:i}=A(r,o);return m(!0),x(null),t(`/api/admin/calendar/meetings?from=${encodeURIComponent(n.toISOString())}&to=${encodeURIComponent(i.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();f(Array.isArray(n.meetings)?n.meetings:[])}).catch(t=>{e||(x(t instanceof Error?t.message:`Failed to load`),f([]))}).finally(()=>{e||(m(!1),y(!0))}),()=>{e=!0}},[r,o,n,t]),(0,E.useEffect)(()=>{let e=!1,{from:n,to:i}=A(r,o);return t(`/api/admin/calendar/free-busy?from=${encodeURIComponent(n.toISOString())}&to=${encodeURIComponent(i.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();T(G(Array.isArray(n.slots)?n.slots:[])),O(n.gapSource===`config`?`config`:`none`)}).catch(()=>{e||(T([]),O(`none`))}),()=>{e=!0}},[r,o,n,t,I]);let V=(0,E.useCallback)(()=>c(new Date),[]),ne=(0,E.useCallback)(()=>c(e=>j(r,e,-1)),[r]),re=(0,E.useCallback)(()=>c(e=>j(r,e,1)),[r]),U=(0,E.useCallback)(()=>{M(e=>{let t=!e;try{sessionStorage.setItem(me,t?`1`:`0`)}catch{}return t})},[]),W=(0,E.useCallback)((e,t)=>F({startsAt:H(e),endsAt:H(t)}),[]),K=(0,E.useCallback)(e=>{f(t=>[...t,e]),R(e=>e+1),F(null)},[]);(0,E.useEffect)(()=>{C(null)},[r,o]);let q=(0,E.useRef)(null);(0,E.useEffect)(()=>{if(p)return;let e=requestAnimationFrame(()=>{let e=fe(q.current);pe(r,e&&{...e,gapSource:D,gaps:w.length,shownKinds:k?`meeting,event,task`:`meeting`,hiddenKinds:k?0:d.filter(e=>(e.kind??`meeting`)!==`meeting`).length})});return()=>cancelAnimationFrame(e)},[r,d,p,D,w,k]);let J=(0,E.useCallback)(e=>{f(t=>t.map(t=>t.meetingId===e.meetingId?e:t)),C(e)},[]),Y=(0,E.useCallback)(e=>{f(t=>t.filter(t=>t.meetingId!==e)),C(null)},[]);return h?(0,L.jsxs)(`div`,{className:`cal-page`,children:[(0,L.jsxs)(`header`,{className:`cal-header`,children:[(0,L.jsxs)(`div`,{className:`cal-nav`,children:[(0,L.jsx)(`span`,{className:`cal-range-label`,children:te(r,o)}),(0,L.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:ne,"aria-label":`Previous`,children:(0,L.jsx)(_,{size:18})}),(0,L.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:re,"aria-label":`Next`,children:(0,L.jsx)(v,{size:18})}),(0,L.jsx)(`button`,{type:`button`,className:`cal-today-btn`,onClick:V,children:`Today`}),p&&(0,L.jsx)(l,{size:16,className:`spin`})]}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-add-btn`,onClick:()=>F({startsAt:``,endsAt:``}),children:[(0,L.jsx)(i,{size:14}),` Add`]}),(0,L.jsx)(`div`,{className:`cal-views`,children:ee.map(e=>(0,L.jsx)(`button`,{type:`button`,className:`cal-view-btn${e===r?` cal-view-btn-active`:``}`,onClick:()=>a(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))}),z&&(0,L.jsxs)(`a`,{className:`cal-booking-link`,href:`https://${z}`,target:`_blank`,rel:`noopener noreferrer`,children:[(0,L.jsx)(g,{size:14}),` Booking page`]})]}),(0,L.jsxs)(`div`,{className:`cal-body`,ref:q,children:[b&&(0,L.jsxs)(`div`,{className:`cal-error`,children:[`Could not load the calendar: `,b]}),(0,L.jsx)(ie,{from:A(r,o).from,to:A(r,o).to,meetings:d,stretches:w,gapSource:D,showAllKinds:k,onToggleKinds:U,onSelect:C,onAddAt:W})]}),P&&(0,L.jsx)(X,{initialStart:P.startsAt,initialEnd:P.endsAt,adminFetch:t,onClose:()=>F(null),onCreated:K}),S&&(0,L.jsx)(Q,{meeting:S,adminFetch:t,onClose:()=>C(null),onSaved:J,onDeleted:Y})]}):(0,L.jsx)(s,{surface:`gate`})}(0,T.createRoot)(document.getElementById(`root`)).render((0,L.jsx)(he,{}));
1
+ import{o as e}from"./chunk-CltuBf4Z.js";import{A as t,B as n,E as r,G as i,J as a,P as o,T as s,Y as c,Z as l,_ as u,b as d,v as f,x as p}from"./useSubAccountSwitcher-CVHqKsqK.js";import{A as m,S as h,t as g}from"./AdminShell-y0_mzlDF.js";import{t as _}from"./chevron-left-zV-WRzHb.js";import{t as v}from"./chevron-right-fnINU4bx.js";import{t as y}from"./clock-2fSxBl6d.js";var b=n(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),x=n(`map-pin`,[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]),S=n(`sticky-note`,[[`path`,{d:`M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z`,key:`1dfntj`}],[`path`,{d:`M15 3v5a1 1 0 0 0 1 1h5`,key:`6s6qgf`}]]),C=n(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),w=n(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),T=c(),E=e(l(),1);function D(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function O(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function k(e){let t=D(e),n=t.getDay();return O(t,n===0?-6:1-n)}function A(e,t){switch(e){case`day`:{let e=D(t);return{from:e,to:O(e,1)}}case`week`:{let e=k(t);return{from:e,to:O(e,7)}}case`month`:return{from:new Date(t.getFullYear(),t.getMonth(),1),to:new Date(t.getFullYear(),t.getMonth()+1,1)};case`year`:return{from:new Date(t.getFullYear(),0,1),to:new Date(t.getFullYear()+1,0,1)}}}function j(e,t,n){switch(e){case`day`:return O(t,n);case`week`:return O(t,n*7);case`month`:return new Date(t.getFullYear(),t.getMonth()+n,1);case`year`:return new Date(t.getFullYear()+n,t.getMonth(),1)}}function M(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}var ee=[`day`,`week`,`month`,`year`],N=`month`;function P(e){return e.toLocaleDateString([],{day:`numeric`,month:`short`})}function F(e){return e.toLocaleDateString([],{day:`numeric`,month:`short`,year:`numeric`})}function te(e,t){switch(e){case`day`:return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});case`week`:{let{from:e,to:n}=A(`week`,t);return`${P(e)} – ${F(new Date(n.getTime()-1))}`}case`month`:return t.toLocaleDateString([],{month:`long`,year:`numeric`});case`year`:return String(t.getFullYear())}}function I(e,t){return{role:`button`,tabIndex:0,onClick:()=>t(e),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t(e))}}}var L=i(),R={meeting:`Meeting`,event:`Event`,task:`Task`};function z(e){return R[e.kind??`meeting`]}function B(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function V(e){if(e.isAllDay)return`All day`;let t=B(new Date(e.startsAt));return e.endsAt?`${t} – ${B(new Date(e.endsAt))}`:t}function H(e){if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}function ne(e){let t=new Date(e.startsAt);if(e.isAllDay)return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});let n=t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),r=B(t);return e.endsAt?`${n} · ${r} – ${B(new Date(e.endsAt))}`:`${n} · ${r}`}function re(e,t){return e.email??`${e.name??`unknown`}-${t}`}function U(e){return e.map(e=>e.name||e.email||`Unknown`).join(`, `)}function W({a:e}){let t=e.name||e.email||`Unknown`,n=e.name&&e.email?e.email:null;return(0,L.jsxs)(`span`,{className:`cal-attendee-lines`,children:[(0,L.jsx)(`span`,{className:`cal-attendee-name`,children:t}),n&&(0,L.jsx)(`span`,{className:`cal-attendee-email`,children:n})]})}function G(e){let t=[...e].sort((e,t)=>e.start.localeCompare(t.start)),n=[];for(let e of t){let t=n[n.length-1];t&&t.end===e.start?(t.end=e.end,t.slots+=1):n.push({start:e.start,end:e.end,slots:1})}return n}function K(e){let t=e.slots===1?`slot`:`slots`;return`free ${B(new Date(e.start))} – ${B(new Date(e.end))} · ${e.slots} ${t}`}function q(e,t,n,r=[]){let i=D(t),a=[];for(let t=0;t<n;t++){let n=O(i,t),o=e.filter(e=>M(new Date(e.startsAt),n)).sort((e,t)=>e.startsAt.localeCompare(t.startsAt)),s=r.some(e=>M(new Date(e.start),n));(o.length>0||s)&&a.push({day:n,meetings:o})}return a}function J(e,t){return Math.round((D(t).getTime()-D(e).getTime())/864e5)}function Y(e,t){let n=e.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`});return M(e,t)?`${n} · today`:n}function ie({from:e,to:t,meetings:n,stretches:r,gapSource:i,showAllKinds:a,onToggleKinds:o,onSelect:s,onAddAt:c}){let l=a?n:n.filter(e=>(e.kind??`meeting`)===`meeting`),u=n.length-l.length,d=q(l,e,J(e,t),r),f=new Date,p=(0,L.jsxs)(`div`,{className:`cal-list-controls`,children:[(0,L.jsx)(`button`,{type:`button`,className:`cal-kind-toggle${a?` cal-kind-toggle-on`:``}`,onClick:o,"aria-pressed":a,children:a?`Meetings only`:`Show reminders and tasks`}),u>0&&(0,L.jsxs)(`span`,{className:`cal-hidden-count`,children:[u,` hidden`]}),i===`none`&&(0,L.jsx)(`span`,{className:`cal-no-hours`,children:`Free time is not shown: working hours are not set.`})]});return d.length===0?(0,L.jsxs)(`div`,{className:`cal-schedule`,children:[p,(0,L.jsx)(`div`,{className:`cal-schedule-empty`,children:`No events in this period.`})]}):(0,L.jsxs)(`div`,{className:`cal-schedule`,children:[p,d.map(e=>{let t=r.filter(t=>M(new Date(t.start),e.day));return(0,L.jsxs)(`section`,{className:`cal-sched-group`,children:[(0,L.jsx)(`h3`,{className:`cal-sched-day${M(e.day,f)?` cal-sched-day-today`:``}`,children:Y(e.day,f)}),e.meetings.map(e=>{let t=[e.location,U(e.attendees)||null,z(e)].filter(Boolean);return(0,L.jsxs)(`div`,{className:`cal-sched-row`,"data-testid":`row-${e.meetingId}`,"data-meeting-id":e.meetingId,"data-kind":e.kind??`meeting`,...I(e,s),children:[(0,L.jsx)(`span`,{className:`cal-sched-time`,children:V(e)}),(0,L.jsxs)(`span`,{className:`cal-sched-detail`,children:[(0,L.jsx)(`span`,{className:`cal-sched-title`,children:e.title??`Untitled`}),(0,L.jsx)(`span`,{className:`cal-sched-meta`,children:t.join(` · `)})]})]},e.meetingId)}),t.map(e=>(0,L.jsx)(`button`,{type:`button`,className:`cal-gap`,"data-gap-start":e.start,onClick:()=>c(e.start,e.end),children:K(e)},e.start))]},e.day.toISOString())})]})}function X({initialStart:e,initialEnd:n,adminFetch:r,onClose:i,onCreated:a}){let[o,s]=(0,E.useState)(``),[c,l]=(0,E.useState)(e),[u,f]=(0,E.useState)(n),[p,m]=(0,E.useState)(``),[h,g]=(0,E.useState)(``),[_,v]=(0,E.useState)(!1),[y,b]=(0,E.useState)(null),x=(0,E.useCallback)(async()=>{if(!o.trim()){b(`Title is required`);return}if(!c){b(`Start time is required`);return}v(!0),b(null);try{let e=await r(`/api/admin/calendar/meetings`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({title:o.trim(),startsAt:new Date(c).toISOString(),endsAt:u?new Date(u).toISOString():null,location:p.trim()||null,privateNote:h.trim()||null})}),t=await e.json();if(!e.ok){b(t.error??`Create failed (HTTP ${e.status})`);return}t.meeting&&a(t.meeting)}catch(e){b(e instanceof Error?e.message:`Create failed`)}finally{v(!1)}},[o,c,u,p,h,r,a]);return(0,L.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{_||i()},children:(0,L.jsxs)(`div`,{className:`cal-modal cal-modal-wide`,role:`dialog`,"aria-modal":`true`,"aria-label":`Add meeting`,onClick:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,L.jsx)(`span`,{className:`cal-modal-kind`,children:`New meeting`}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:i,"aria-label":`Close`,disabled:_,children:(0,L.jsx)(d,{size:16})})]}),(0,L.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Title`}),(0,L.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),disabled:_,autoFocus:!0})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Starts`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:c,onChange:e=>l(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Ends`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:u,onChange:e=>f(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Location`}),(0,L.jsx)(`input`,{type:`text`,value:p,onChange:e=>m(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Private note`}),(0,L.jsx)(`textarea`,{value:h,onChange:e=>g(e.target.value),disabled:_,rows:2})]}),y&&(0,L.jsx)(`div`,{className:`cal-modal-error`,children:y})]}),(0,L.jsxs)(`div`,{className:`cal-modal-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:i,disabled:_,children:`Cancel`}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:x,disabled:_,children:[_?(0,L.jsx)(t,{size:14,className:`spin`}):null,` Create`]})]})]})})}function ae(e){return new Date(e).toISOString()}function Z(e){return Math.floor(new Date(e).getTime()/6e4)}function oe(e){if(!e)return null;let t=e.match(/filename="([^"]+)"/);return t?t[1]:null}function Q({meeting:e,adminFetch:n,onClose:i,onSaved:a,onDeleted:s}){let c=e.kind===`meeting`,[l,u]=(0,E.useState)(!1),[f,m]=(0,E.useState)(!1),[h,g]=(0,E.useState)(!1),[_,v]=(0,E.useState)(!1),[T,D]=(0,E.useState)(null),[O,k]=(0,E.useState)(e),[A,j]=(0,E.useState)(e.title??``),[M,ee]=(0,E.useState)(H(e.startsAt)),[N,P]=(0,E.useState)(e.endsAt?H(e.endsAt):``),[F,te]=(0,E.useState)(e.location??``),[I,z]=(0,E.useState)(e.privateNote??``),[B,V]=(0,E.useState)(``),[U,G]=(0,E.useState)(``);(0,E.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!_&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[_,i]);let K=(0,E.useCallback)(()=>{let e={},t=A.trim();t!==(O.title??``)&&(e.title=t);let n=ae(M);Z(n)!==Z(O.startsAt)&&(e.startsAt=n);let r=N?ae(N):null;(r===null?O.endsAt!==null:O.endsAt===null||Z(r)!==Z(O.endsAt))&&(e.endsAt=r);let i=F.trim()||null;i!==(O.location??null)&&(e.location=i);let a=I.trim()||null;return a!==(O.privateNote??null)&&(e.privateNote=a),e},[A,M,N,F,I,O]),q=(0,E.useCallback)(async()=>{let t=K();if(Object.keys(t).length===0){u(!1);return}v(!0),D(null);try{let r=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();k(i.meeting),a(i.meeting),u(!1)}catch(e){D(e instanceof Error?e.message:`Save failed`)}finally{v(!1)}},[n,K,e.meetingId,a]),J=(0,E.useCallback)(async()=>{let t=B.trim(),r=U.trim();if(!(!t&&!r)){v(!0),D(null);try{let i=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/attendees`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:t||void 0,email:r||void 0})});if(!i.ok)throw Error(`HTTP ${i.status}`);let o=await i.json();k(o.meeting),a(o.meeting),V(``),G(``)}catch(e){D(e instanceof Error?e.message:`Add failed`)}finally{v(!1)}}},[n,B,U,e.meetingId,a]),Y=(0,E.useCallback)(async t=>{let r=t.email?{email:t.email}:{name:t.name};v(!0),D(null);try{let t=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/attendees`,{method:`DELETE`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!t.ok)throw Error(`HTTP ${t.status}`);let i=await t.json();k(i.meeting),a(i.meeting)}catch(e){D(e instanceof Error?e.message:`Remove failed`)}finally{v(!1)}},[n,e.meetingId,a]),ie=(0,E.useCallback)(async()=>{v(!0),D(null);try{let t=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);s(e.meetingId)}catch(e){D(e instanceof Error?e.message:`Delete failed`),v(!1)}},[n,e.meetingId,s]),X=(0,E.useCallback)(async t=>{g(!1),v(!0),D(null);try{let r=await n(`/api/admin/calendar/meetings/${encodeURIComponent(e.meetingId)}/ics?attendees=${t?`1`:`0`}`);if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.blob(),a=oe(r.headers.get(`content-disposition`))??`meeting.ics`,o=URL.createObjectURL(i),s=document.createElement(`a`);s.href=o,s.download=a,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(o)}catch(e){D(e instanceof Error?e.message:`Download failed`)}finally{v(!1)}},[n,e.meetingId]),Q=R[e.kind??`meeting`],se=B.trim().length>0||U.trim().length>0;return(0,L.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{_||i()},children:(0,L.jsxs)(`div`,{className:`cal-modal cal-modal-wide`,role:`dialog`,"aria-modal":`true`,"aria-label":l?`Edit meeting`:`Meeting detail`,onClick:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,L.jsx)(`span`,{className:`cal-modal-kind`,children:Q}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:i,"aria-label":`Close`,autoFocus:!0,disabled:_,children:(0,L.jsx)(d,{size:16})})]}),!l&&(0,L.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,L.jsx)(`div`,{className:`cal-modal-title`,children:O.title??`Untitled`}),(0,L.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,L.jsx)(y,{size:14}),(0,L.jsx)(`span`,{children:ne(O)})]}),O.location&&(0,L.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,L.jsx)(x,{size:14}),(0,L.jsx)(`span`,{children:O.location})]}),O.attendees.length>0&&(0,L.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,L.jsx)(w,{size:14}),(0,L.jsx)(`div`,{className:`cal-modal-attendees`,children:O.attendees.map((e,t)=>(0,L.jsx)(`div`,{className:`cal-attendee-row`,children:(0,L.jsx)(W,{a:e})},re(e,t)))})]}),O.privateNote&&(0,L.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,L.jsx)(S,{size:14}),(0,L.jsx)(`span`,{className:`cal-modal-note`,children:O.privateNote})]}),(0,L.jsxs)(`div`,{className:`cal-modal-row cal-modal-meta`,children:[(0,L.jsx)(b,{size:14}),(0,L.jsx)(`span`,{children:Q})]})]}),l&&(0,L.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Title`}),(0,L.jsx)(`input`,{type:`text`,value:A,onChange:e=>j(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Start`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:M,onChange:e=>ee(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`End`}),(0,L.jsx)(`input`,{type:`datetime-local`,value:N,onChange:e=>P(e.target.value),disabled:_})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Location`}),(0,L.jsx)(`input`,{type:`text`,value:F,onChange:e=>te(e.target.value),disabled:_})]}),(0,L.jsxs)(`div`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Attendees`}),(0,L.jsxs)(`div`,{className:`cal-modal-attendees cal-modal-attendees-edit`,children:[O.attendees.length===0&&(0,L.jsx)(`div`,{className:`cal-attendee-empty`,children:`No attendees yet.`}),O.attendees.map((e,t)=>(0,L.jsxs)(`div`,{className:`cal-attendee-row cal-attendee-row-edit`,children:[(0,L.jsx)(W,{a:e}),(0,L.jsx)(`button`,{type:`button`,className:`cal-attendee-remove`,onClick:()=>Y(e),disabled:_,"aria-label":`Remove ${e.name||e.email||`attendee`}`,children:(0,L.jsx)(d,{size:13})})]},re(e,t)))]}),(0,L.jsxs)(`div`,{className:`cal-attendee-add`,children:[(0,L.jsx)(`input`,{type:`text`,placeholder:`Name`,value:B,onChange:e=>V(e.target.value),disabled:_,"aria-label":`Attendee name`}),(0,L.jsx)(`input`,{type:`email`,placeholder:`Email`,value:U,onChange:e=>G(e.target.value),disabled:_,"aria-label":`Attendee email`}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn cal-attendee-add-btn`,onClick:J,disabled:_||!se,"aria-label":`Add attendee`,children:_?(0,L.jsx)(t,{size:13,className:`spin`}):(0,L.jsx)(C,{size:13})})]})]}),(0,L.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,L.jsx)(`span`,{children:`Private note`}),(0,L.jsx)(`textarea`,{className:`cal-modal-textarea`,value:I,onChange:e=>z(e.target.value),disabled:_,rows:3,placeholder:`Only you and your team can see this.`})]})]}),T&&(0,L.jsx)(`div`,{className:`cal-modal-error`,children:T}),c&&(0,L.jsxs)(`div`,{className:`cal-modal-actions`,children:[!l&&!f&&!h&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>u(!0),disabled:_,children:[(0,L.jsx)(r,{size:14}),` Edit`]}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:()=>m(!0),disabled:_,children:[(0,L.jsx)(p,{size:14}),` Delete`]}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-download`,onClick:()=>{O.attendees.length>0?g(!0):X(!1)},disabled:_,children:[_?(0,L.jsx)(t,{size:14,className:`spin`}):(0,L.jsx)(o,{size:14}),` Download`]})]}),h&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Include attendees in the file?`}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:()=>X(!0),disabled:_,children:[_?(0,L.jsx)(t,{size:14,className:`spin`}):null,` Yes`]}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>X(!1),disabled:_,children:`No`}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>g(!1),disabled:_,children:`Cancel`})]}),l&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:q,disabled:_,children:[_?(0,L.jsx)(t,{size:14,className:`spin`}):null,` Save`]}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>{u(!1),D(null)},disabled:_,children:`Cancel`})]}),f&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Delete this meeting?`}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:ie,disabled:_,children:[_?(0,L.jsx)(t,{size:14,className:`spin`}):null,` Delete`]}),(0,L.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>m(!1),disabled:_,children:`Cancel`})]})]})]})})}var se=8;function ce(e,t){return t?{op:`view-census`,range:e,nodes:t.nodes.length,clippedV:t.nodes.filter(e=>e.clippedV).length,clippedH:t.nodes.filter(e=>e.clippedH).length,hidden:t.hidden,fields:t.fields.length>0?t.fields.join(`,`):`-`,minBlockPx:t.minBlockPx??`-`,lineBoxPx:t.lineBoxPx??`-`,gapSource:t.gapSource??`-`,gaps:t.gaps??`-`,shownKinds:t.shownKinds??`-`,hiddenKinds:t.hiddenKinds??`-`,source:`measured`}:{op:`view-census`,range:e,nodes:`-`,clippedV:`-`,clippedH:`-`,hidden:`-`,fields:`-`,minBlockPx:`-`,lineBoxPx:`-`,gapSource:`-`,gaps:`-`,shownKinds:`-`,hiddenKinds:`-`,source:`unavailable`}}var le=5;function ue(e,t){if(!t)return[];let n=[];for(let r of t.nodes)for(let t of[`v`,`h`])(t===`v`?r.clippedV:r.clippedH)&&n.push({op:`node-clipped`,view:e,meetingId:r.meetingId,axis:t,renderedPx:r.renderedPx,neededPx:r.neededPx,durationMin:r.durationMin??`-`});if(n.length<=le)return n;let r=n.slice(0,le);return r[r.length-1]={...r[r.length-1],truncated:n.length-le},r}function de(e){let t=(e.textContent??``).length;if(t===0||e.scrollWidth===0||e.clientWidth>=e.scrollWidth-1)return!0;let n=e.scrollWidth/t;return e.clientWidth/n>=se}function fe(e){if(!e||typeof window>`u`||typeof window.getComputedStyle!=`function`)return null;let t=Array.from(e.querySelectorAll(`[data-meeting-id]`)),n=t.map(e=>e.getBoundingClientRect());if(t.length>0&&n.every(e=>e.height===0&&e.width===0))return null;let r=t.length>0?parseFloat(window.getComputedStyle(t[0]).lineHeight):null,i=t.map((e,t)=>{let r=e.querySelector(`.cal-sched-title`),i=e.querySelector(`.cal-event-title`)??r??e,a=i.scrollWidth>i.clientWidth+1,o=e.getAttribute(`data-duration-min`);return{meetingId:e.getAttribute(`data-meeting-id`)??`unknown`,clippedV:e.scrollHeight>e.clientHeight+1,clippedH:r?a:a&&!de(i),durationMin:o?Number(o):null,renderedPx:Math.round(n[t].height*10)/10,neededPx:Math.round(e.scrollHeight*10)/10}}),a=[];e.querySelector(`.cal-event-title, .cal-chip, .cal-sched-title`)&&a.push(`title`),e.querySelector(`.cal-event-time, .cal-sched-time`)&&a.push(`time`),e.querySelector(`.cal-sched-meta`)&&a.push(`meta`);let o=0;for(let t of Array.from(e.querySelectorAll(`.cal-more`)))o+=Number(t.getAttribute(`data-hidden-count`)??0);return{nodes:i,hidden:o,fields:a,minBlockPx:i.length>0?Math.min(...i.map(e=>e.renderedPx)):null,lineBoxPx:Number.isFinite(r)?r:null}}function pe(e,t){for(let n of[ce(e,t),...ue(e,t)])try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`event`,source:`calendar-legibility`,...n}),keepalive:!0}).catch(()=>{})}catch{}}var $=`maxy-admin-session-key`,me=`maxy-calendar-show-all-kinds`;function he(){let[e,t]=(0,E.useState)(null),[n,r]=(0,E.useState)(!1),[i,a]=(0,E.useState)(void 0),[o,s]=(0,E.useState)(null),[c,l]=(0,E.useState)(void 0),[d,p]=(0,E.useState)(null),[h,_]=(0,E.useState)(null);(0,E.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem($)}catch{}if(!n){r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(async i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`;return}if(i.ok)try{let e=await i.json();typeof e.businessName==`string`&&a(e.businessName),e.sessionId!==void 0&&s(e.sessionId??null),_(e.role??null),l(e.userName===void 0?null:e.userName),p(e.avatar??null)}catch{}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]);let v=(0,E.useCallback)(()=>{try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},[]),[y,b]=(0,E.useState)(!1),x=(0,E.useCallback)(async()=>{b(!0);try{let e=await m();if(e){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`}return e}finally{b(!1)}},[]);return n?e?(0,L.jsx)(f,{cacheKey:e,surface:`calendar`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=calendar`);try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},children:(0,L.jsx)(g,{cacheKey:e,businessName:i,sessionId:o,onLogout:v,onDisconnect:x,disconnecting:y,userName:c,userAvatar:d,role:h,children:(0,L.jsx)(ge,{cacheKey:e})})}):(0,L.jsx)(`div`,{className:`cal-page`,children:(0,L.jsxs)(`div`,{className:`cal-empty`,children:[(0,L.jsx)(`p`,{children:`You are not signed in.`}),(0,L.jsxs)(`p`,{children:[`Open the `,(0,L.jsx)(`a`,{href:`/`,className:`cal-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,L.jsx)(u,{surface:`gate`})}function ge({cacheKey:e}){let{adminFetch:n,sessionRefetchNonce:r}=a({initialCacheKey:e,surface:`calendar`}),[i,o]=(0,E.useState)(N),[c,l]=(0,E.useState)(()=>new Date),[d,f]=(0,E.useState)([]),[p,m]=(0,E.useState)(!1),[g,y]=(0,E.useState)(!1),[b,x]=(0,E.useState)(null),[S,C]=(0,E.useState)(null),[w,T]=(0,E.useState)([]),[D,O]=(0,E.useState)(`none`),[k,M]=(0,E.useState)(()=>{try{return sessionStorage.getItem(me)===`1`}catch{return!1}}),[P,F]=(0,E.useState)(null),[I,R]=(0,E.useState)(0),[z,B]=(0,E.useState)(null);(0,E.useEffect)(()=>{let e=!1;return n(`/api/admin/calendar/booking-link`).then(async t=>{if(e||!t.ok)return;let n=await t.json();typeof n.bookingDomain==`string`&&n.bookingDomain&&B(n.bookingDomain)}).catch(()=>{}),()=>{e=!0}},[n]),(0,E.useEffect)(()=>{let e=!1,{from:t,to:r}=A(i,c);return m(!0),x(null),n(`/api/admin/calendar/meetings?from=${encodeURIComponent(t.toISOString())}&to=${encodeURIComponent(r.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();f(Array.isArray(n.meetings)?n.meetings:[])}).catch(t=>{e||(x(t instanceof Error?t.message:`Failed to load`),f([]))}).finally(()=>{e||(m(!1),y(!0))}),()=>{e=!0}},[i,c,r,n]),(0,E.useEffect)(()=>{let e=!1,{from:t,to:r}=A(i,c);return n(`/api/admin/calendar/free-busy?from=${encodeURIComponent(t.toISOString())}&to=${encodeURIComponent(r.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();T(G(Array.isArray(n.slots)?n.slots:[])),O(n.gapSource===`config`?`config`:`none`)}).catch(()=>{e||(T([]),O(`none`))}),()=>{e=!0}},[i,c,r,n,I]);let V=(0,E.useCallback)(()=>l(new Date),[]),ne=(0,E.useCallback)(()=>l(e=>j(i,e,-1)),[i]),re=(0,E.useCallback)(()=>l(e=>j(i,e,1)),[i]),U=(0,E.useCallback)(()=>{M(e=>{let t=!e;try{sessionStorage.setItem(me,t?`1`:`0`)}catch{}return t})},[]),W=(0,E.useCallback)((e,t)=>F({startsAt:H(e),endsAt:H(t)}),[]),K=(0,E.useCallback)(e=>{f(t=>[...t,e]),R(e=>e+1),F(null)},[]);(0,E.useEffect)(()=>{C(null)},[i,c]);let q=(0,E.useRef)(null);(0,E.useEffect)(()=>{if(p)return;let e=requestAnimationFrame(()=>{let e=fe(q.current);pe(i,e&&{...e,gapSource:D,gaps:w.length,shownKinds:k?`meeting,event,task`:`meeting`,hiddenKinds:k?0:d.filter(e=>(e.kind??`meeting`)!==`meeting`).length})});return()=>cancelAnimationFrame(e)},[i,d,p,D,w,k]);let J=(0,E.useCallback)(e=>{f(t=>t.map(t=>t.meetingId===e.meetingId?e:t)),C(e)},[]),Y=(0,E.useCallback)(e=>{f(t=>t.filter(t=>t.meetingId!==e)),C(null)},[]);return g?(0,L.jsxs)(`div`,{className:`cal-page`,children:[(0,L.jsxs)(`header`,{className:`cal-header`,children:[(0,L.jsxs)(`div`,{className:`cal-nav`,children:[(0,L.jsx)(`span`,{className:`cal-range-label`,children:te(i,c)}),(0,L.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:ne,"aria-label":`Previous`,children:(0,L.jsx)(_,{size:18})}),(0,L.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:re,"aria-label":`Next`,children:(0,L.jsx)(v,{size:18})}),(0,L.jsx)(`button`,{type:`button`,className:`cal-today-btn`,onClick:V,children:`Today`}),p&&(0,L.jsx)(t,{size:16,className:`spin`})]}),(0,L.jsxs)(`button`,{type:`button`,className:`cal-add-btn`,onClick:()=>F({startsAt:``,endsAt:``}),children:[(0,L.jsx)(s,{size:14}),` Add`]}),(0,L.jsx)(`div`,{className:`cal-views`,children:ee.map(e=>(0,L.jsx)(`button`,{type:`button`,className:`cal-view-btn${e===i?` cal-view-btn-active`:``}`,onClick:()=>o(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))}),z&&(0,L.jsxs)(`a`,{className:`cal-booking-link`,href:`https://${z}`,target:`_blank`,rel:`noopener noreferrer`,children:[(0,L.jsx)(h,{size:14}),` Booking page`]})]}),(0,L.jsxs)(`div`,{className:`cal-body`,ref:q,children:[b&&(0,L.jsxs)(`div`,{className:`cal-error`,children:[`Could not load the calendar: `,b]}),(0,L.jsx)(ie,{from:A(i,c).from,to:A(i,c).to,meetings:d,stretches:w,gapSource:D,showAllKinds:k,onToggleKinds:U,onSelect:C,onAddAt:W})]}),P&&(0,L.jsx)(X,{initialStart:P.startsAt,initialEnd:P.endsAt,adminFetch:n,onClose:()=>F(null),onCreated:K}),S&&(0,L.jsx)(Q,{meeting:S,adminFetch:n,onClose:()=>C(null),onSaved:J,onDeleted:Y})]}):(0,L.jsx)(u,{surface:`gate`})}(0,T.createRoot)(document.getElementById(`root`)).render((0,L.jsx)(he,{}));
@@ -0,0 +1 @@
1
+ import{G as e,Y as t}from"./useSubAccountSwitcher-CVHqKsqK.js";import"./useVoiceRecorder-DpQTvvqD.js";import"./AdminShell-y0_mzlDF.js";import{n}from"./page-Dzs3MsFL.js";import"./useCopyFeedback-CmawEsVi.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
@@ -0,0 +1 @@
1
+ import{B as e}from"./useSubAccountSwitcher-CVHqKsqK.js";var t=e(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{B as e}from"./useSubAccountSwitcher-CVHqKsqK.js";var t=e(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{B as e}from"./useSubAccountSwitcher-CVHqKsqK.js";var t=e(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{B as e}from"./useSubAccountSwitcher-CVHqKsqK.js";var t=e(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{G as e,Y as t}from"./useSubAccountSwitcher-CVHqKsqK.js";import"./useVoiceRecorder-DpQTvvqD.js";import{t as n}from"./page-Cz0p1mBf.js";import"./graph-labels-g-JodMWQ.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
@@ -1 +1 @@
1
- import{z as e}from"./useSubAccountSwitcher-UMg53kKF.js";var t=e(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]);export{t};
1
+ import{B as e}from"./useSubAccountSwitcher-CVHqKsqK.js";var t=e(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]);export{t};