@rubytech/create-maxy-code 0.1.345 → 0.1.346

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy-code",
3
- "version": "0.1.345",
3
+ "version": "0.1.346",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy-code": "./dist/index.js"
@@ -0,0 +1 @@
1
+ import{o as e}from"./chunk-CAM3fms7.js";import{A as t,B as n,C as r,I as i,O as a,R as o,T as s,U as c,V as l,v as u,w as d}from"./OperatorConversations-g7aAQCDn.js";import{d as f,g as p,t as m}from"./AdminShell-D3N3Aq04.js";var h=o(`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`}]]),g=o(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),_=o(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),v=o(`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`}]]),y=l(),b=e(c(),1);function x(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function S(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function C(e){let t=x(e),n=t.getDay();return S(t,n===0?-6:1-n)}function w(e){let t=C(e);return Array.from({length:7},(e,n)=>S(t,n))}function T(e){let t=C(new Date(e.getFullYear(),e.getMonth(),1));return Array.from({length:42},(e,n)=>S(t,n))}function E(){return Array.from({length:24},(e,t)=>t)}function D(e){let t=e.getFullYear();return Array.from({length:12},(e,n)=>new Date(t,n,1))}function O(e,t){switch(e){case`day`:{let e=x(t);return{from:e,to:S(e,1)}}case`week`:{let e=C(t);return{from:e,to:S(e,7)}}case`month`:{let e=C(new Date(t.getFullYear(),t.getMonth(),1));return{from:e,to:S(e,42)}}case`year`:return{from:new Date(t.getFullYear(),0,1),to:new Date(t.getFullYear()+1,0,1)}}}function k(e,t,n){switch(e){case`day`:return S(t,n);case`week`:return S(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 A(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function j(e,t){return{role:`button`,tabIndex:0,onClick:()=>t(e),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t(e))}}}var M=r(),N=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],P=3;function F(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function I({anchor:e,meetings:t,onSelect:n}){let r=T(e),i=e.getMonth(),a=new Date;return(0,M.jsxs)(`div`,{className:`cal-month`,children:[(0,M.jsx)(`div`,{className:`cal-weekday-row`,children:N.map(e=>(0,M.jsx)(`div`,{className:`cal-weekday`,children:e},e))}),(0,M.jsx)(`div`,{className:`cal-month-grid`,children:r.map(e=>{let r=t.filter(t=>A(new Date(t.startsAt),e)).sort((e,t)=>e.startsAt.localeCompare(t.startsAt)),o=e.getMonth()!==i,s=A(e,a);return(0,M.jsxs)(`div`,{className:`cal-cell${o?` cal-cell-out`:``}${s?` cal-cell-today`:``}`,children:[(0,M.jsx)(`div`,{className:`cal-cell-num`,children:e.getDate()}),r.slice(0,P).map(e=>(0,M.jsxs)(`div`,{className:`cal-chip`,title:e.title??`Untitled`,...j(e,n),children:[!e.isAllDay&&(0,M.jsx)(`span`,{className:`cal-chip-time`,children:F(new Date(e.startsAt))}),e.title??`Untitled`]},e.meetingId)),r.length>P&&(0,M.jsxs)(`div`,{className:`cal-more`,children:[`+`,r.length-P,` more`]})]},e.toISOString())})})]})}var L=1440,R=1.8;function z(e){return e.getHours()*60+e.getMinutes()}function B(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function V({day:e,meetings:t,hourHeight:n,onSelect:r}){let i=n*24,a=t.filter(t=>!t.isAllDay&&A(new Date(t.startsAt),e));return(0,M.jsx)(`div`,{className:`cal-day-col`,children:(0,M.jsxs)(`div`,{className:`cal-hours`,style:{height:`${i}px`},children:[Array.from({length:24},(e,t)=>(0,M.jsx)(`div`,{className:`cal-hour-line`,style:{top:`${t*n}px`}},t)),a.map(t=>{let n=new Date(t.startsAt),i=t.endsAt?new Date(t.endsAt):new Date(n.getTime()+30*6e4),a=z(n),o=A(i,e)?z(i):L,s=a/L*100,c=Math.max((o-a)/L*100,R);return(0,M.jsxs)(`div`,{className:`cal-event`,style:{top:`${s}%`,height:`${c}%`},title:t.title??`Untitled`,...j(t,r),children:[(0,M.jsx)(`span`,{className:`cal-event-time`,children:B(n)}),(0,M.jsx)(`span`,{className:`cal-event-title`,children:t.title??`Untitled`})]},t.meetingId)})]})})}var H=44;function U(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function W({anchor:e,meetings:t,onSelect:n}){let r=w(e),i=new Date;return(0,M.jsxs)(`div`,{className:`cal-timed`,children:[(0,M.jsxs)(`div`,{className:`cal-day-headrow`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`}),r.map(e=>(0,M.jsxs)(`div`,{className:`cal-day-head${A(e,i)?` cal-day-head-today`:``}`,children:[(0,M.jsx)(`span`,{className:`cal-day-head-name`,children:e.toLocaleDateString([],{weekday:`short`})}),(0,M.jsx)(`span`,{className:`cal-day-head-num`,children:e.getDate()})]},e.toISOString()))]}),(0,M.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),r.map(e=>(0,M.jsx)(`div`,{className:`cal-allday-cell`,children:t.filter(t=>t.isAllDay&&A(new Date(t.startsAt),e)).map(e=>(0,M.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,...j(e,n),children:e.title??`Untitled`},e.meetingId))},e.toISOString()))]}),(0,M.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:E().map(e=>(0,M.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${H}px`},children:e===0?``:U(e)},e))}),r.map(e=>(0,M.jsx)(V,{day:e,meetings:t,hourHeight:H,onSelect:n},e.toISOString()))]})]})}var G=52;function K(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function q({anchor:e,meetings:t,onSelect:n}){let r=t.filter(t=>t.isAllDay&&A(new Date(t.startsAt),e));return(0,M.jsxs)(`div`,{className:`cal-timed cal-timed-single`,children:[(0,M.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),(0,M.jsx)(`div`,{className:`cal-allday-cell`,children:r.map(e=>(0,M.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,...j(e,n),children:e.title??`Untitled`},e.meetingId))})]}),(0,M.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:E().map(e=>(0,M.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${G}px`},children:e===0?``:K(e)},e))}),(0,M.jsx)(V,{day:e,meetings:t,hourHeight:G,onSelect:n})]})]})}var J=[`M`,`T`,`W`,`T`,`F`,`S`,`S`];function Y(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function ee({anchor:e,meetings:t,onPickMonth:n}){let r=new Date,i=new Set(t.map(e=>Y(new Date(e.startsAt))));return(0,M.jsx)(`div`,{className:`cal-year`,children:(0,M.jsx)(`div`,{className:`cal-year-grid`,children:D(e).map(e=>{let t=T(e),a=e.getMonth();return(0,M.jsxs)(`button`,{type:`button`,className:`cal-mini`,onClick:()=>n(e),title:e.toLocaleDateString([],{month:`long`,year:`numeric`}),children:[(0,M.jsx)(`div`,{className:`cal-mini-title`,children:e.toLocaleDateString([],{month:`long`})}),(0,M.jsx)(`div`,{className:`cal-mini-weekrow`,children:J.map((e,t)=>(0,M.jsx)(`span`,{className:`cal-mini-weekday`,children:e},t))}),(0,M.jsx)(`div`,{className:`cal-mini-grid`,children:t.map(e=>{let t=e.getMonth()!==a,n=A(e,r),o=!t&&i.has(Y(e));return(0,M.jsxs)(`span`,{className:`cal-mini-day${t?` cal-mini-day-out`:``}${n?` cal-mini-day-today`:``}`,children:[e.getDate(),o&&(0,M.jsx)(`span`,{className:`cal-mini-dot`})]},e.toISOString())})})]},a)})})})}var te={meeting:`Meeting`,event:`Event`,task:`Task`};function X(e){let t=new Date(e),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 Z(e){return new Date(e).toISOString()}function Q(e){return Math.floor(new Date(e).getTime()/6e4)}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=t.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`});return e.endsAt?`${n} · ${r} – ${new Date(e.endsAt).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}`:`${n} · ${r}`}function re({meeting:e,adminFetch:n,onClose:r,onSaved:i,onDeleted:o}){let c=e.kind===`meeting`,[l,u]=(0,b.useState)(!1),[p,m]=(0,b.useState)(!1),[g,y]=(0,b.useState)(!1),[x,S]=(0,b.useState)(null),[C,w]=(0,b.useState)(e.title??``),[T,E]=(0,b.useState)(X(e.startsAt)),[D,O]=(0,b.useState)(e.endsAt?X(e.endsAt):``),[k,A]=(0,b.useState)(e.location??``);(0,b.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!g&&r()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[g,r]);let j=(0,b.useCallback)(()=>{let t={},n=C.trim();n!==(e.title??``)&&(t.title=n);let r=Z(T);Q(r)!==Q(e.startsAt)&&(t.startsAt=r);let i=D?Z(D):null;(i===null?e.endsAt!==null:e.endsAt===null||Q(i)!==Q(e.endsAt))&&(t.endsAt=i);let a=k.trim()||null;return a!==(e.location??null)&&(t.location=a),t},[C,T,D,k,e]),N=(0,b.useCallback)(async()=>{let t=j();if(Object.keys(t).length===0){u(!1);return}y(!0),S(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}`);i((await r.json()).meeting)}catch(e){S(e instanceof Error?e.message:`Save failed`)}finally{y(!1)}},[n,j,e.meetingId,i]),P=(0,b.useCallback)(async()=>{y(!0),S(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){S(e instanceof Error?e.message:`Delete failed`),y(!1)}},[n,e.meetingId,o]),F=te[e.kind??`meeting`];return(0,M.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{g||r()},children:(0,M.jsxs)(`div`,{className:`cal-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":l?`Edit meeting`:`Meeting detail`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,M.jsx)(`span`,{className:`cal-modal-kind`,children:F}),(0,M.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:r,"aria-label":`Close`,autoFocus:!0,disabled:g,children:(0,M.jsx)(d,{size:16})})]}),!l&&(0,M.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,M.jsx)(`div`,{className:`cal-modal-title`,children:e.title??`Untitled`}),(0,M.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,M.jsx)(_,{size:14}),(0,M.jsx)(`span`,{children:ne(e)})]}),e.location&&(0,M.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,M.jsx)(v,{size:14}),(0,M.jsx)(`span`,{children:e.location})]}),e.attendees.length>0&&(0,M.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,M.jsx)(f,{size:14}),(0,M.jsx)(`span`,{children:e.attendees.map(e=>e.name||e.email||`Unknown`).join(`, `)})]}),(0,M.jsxs)(`div`,{className:`cal-modal-row cal-modal-meta`,children:[(0,M.jsx)(h,{size:14}),(0,M.jsx)(`span`,{children:F})]})]}),l&&(0,M.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`Title`}),(0,M.jsx)(`input`,{type:`text`,value:C,onChange:e=>w(e.target.value),disabled:g})]}),(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`Start`}),(0,M.jsx)(`input`,{type:`datetime-local`,value:T,onChange:e=>E(e.target.value),disabled:g})]}),(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`End`}),(0,M.jsx)(`input`,{type:`datetime-local`,value:D,onChange:e=>O(e.target.value),disabled:g})]}),(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`Location`}),(0,M.jsx)(`input`,{type:`text`,value:k,onChange:e=>A(e.target.value),disabled:g})]})]}),x&&(0,M.jsx)(`div`,{className:`cal-modal-error`,children:x}),c&&(0,M.jsxs)(`div`,{className:`cal-modal-actions`,children:[!l&&!p&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>u(!0),children:[(0,M.jsx)(a,{size:14}),` Edit`]}),(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:()=>m(!0),children:[(0,M.jsx)(s,{size:14}),` Delete`]})]}),l&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:N,disabled:g,children:[g?(0,M.jsx)(t,{size:14,className:`spin`}):null,` Save`]}),(0,M.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>{u(!1),S(null)},disabled:g,children:`Cancel`})]}),p&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Delete this meeting?`}),(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:P,disabled:g,children:[g?(0,M.jsx)(t,{size:14,className:`spin`}):null,` Delete`]}),(0,M.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>m(!1),disabled:g,children:`Cancel`})]})]})]})})}var $=`maxy-admin-session-key`,ie=[`day`,`week`,`month`,`year`];function ae(e,t){switch(e){case`day`:return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});case`week`:{let{from:e,to:n}=O(`week`,t),r=new Date(n.getTime()-1);return`${e.toLocaleDateString([],{day:`numeric`,month:`short`})} – ${r.toLocaleDateString([],{day:`numeric`,month:`short`,year:`numeric`})}`}case`month`:return t.toLocaleDateString([],{month:`long`,year:`numeric`});case`year`:return String(t.getFullYear())}}function oe(){let[e,n]=(0,b.useState)(null),[r,i]=(0,b.useState)(!1),[a,o]=(0,b.useState)(void 0),[s,c]=(0,b.useState)(null),[l,d]=(0,b.useState)(void 0),[f,h]=(0,b.useState)(null),[g,_]=(0,b.useState)(null);(0,b.useEffect)(()=>{let e=!1,t=null;try{t=sessionStorage.getItem($)}catch{}if(!t){i(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(t)}`).then(async r=>{if(!e){if(r.status===401){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`;return}if(r.ok)try{let e=await r.json();typeof e.businessName==`string`&&o(e.businessName),e.sessionId!==void 0&&c(e.sessionId??null),_(e.role??null),d(e.userName===void 0?null:e.userName),h(e.avatar??null)}catch{}n(t),i(!0)}}).catch(()=>{e||(n(t),i(!0))}),()=>{e=!0}},[]);let v=(0,b.useCallback)(()=>{try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},[]),[y,x]=(0,b.useState)(!1),S=(0,b.useCallback)(async()=>{x(!0);try{let e=await p();if(e){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`}return e}finally{x(!1)}},[]);return r?e?(0,M.jsx)(u,{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,M.jsx)(m,{cacheKey:e,businessName:a,sessionId:s,onLogout:v,onDisconnect:S,disconnecting:y,userName:l,userAvatar:f,role:g,children:(0,M.jsx)(se,{cacheKey:e})})}):(0,M.jsx)(`div`,{className:`cal-page`,children:(0,M.jsxs)(`div`,{className:`cal-empty`,children:[(0,M.jsx)(`p`,{children:`You are not signed in.`}),(0,M.jsxs)(`p`,{children:[`Open the `,(0,M.jsx)(`a`,{href:`/`,className:`cal-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,M.jsx)(`div`,{className:`cal-page`,children:(0,M.jsxs)(`div`,{className:`cal-loading`,children:[(0,M.jsx)(t,{size:18,className:`spin`}),` Loading…`]})})}function se({cacheKey:e}){let{adminFetch:r,sessionRefetchNonce:a}=n({initialCacheKey:e,surface:`calendar`}),[o,s]=(0,b.useState)(`month`),[c,l]=(0,b.useState)(()=>new Date),[u,d]=(0,b.useState)([]),[f,p]=(0,b.useState)(!1),[m,_]=(0,b.useState)(null),[v,y]=(0,b.useState)(null);(0,b.useEffect)(()=>{let e=!1,{from:t,to:n}=O(o,c);return p(!0),_(null),r(`/api/admin/calendar/meetings?from=${encodeURIComponent(t.toISOString())}&to=${encodeURIComponent(n.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();d(Array.isArray(n.meetings)?n.meetings:[])}).catch(t=>{e||(_(t instanceof Error?t.message:`Failed to load`),d([]))}).finally(()=>{e||p(!1)}),()=>{e=!0}},[o,c,a,r]);let x=(0,b.useCallback)(()=>l(new Date),[]),S=(0,b.useCallback)(()=>l(e=>k(o,e,-1)),[o]),C=(0,b.useCallback)(()=>l(e=>k(o,e,1)),[o]),w=(0,b.useCallback)(e=>{l(e),s(`month`)},[]);(0,b.useEffect)(()=>{y(null)},[o,c]);let T=(0,b.useCallback)(e=>{d(t=>t.map(t=>t.meetingId===e.meetingId?e:t)),y(e)},[]),E=(0,b.useCallback)(e=>{d(t=>t.filter(t=>t.meetingId!==e)),y(null)},[]);return(0,M.jsxs)(`div`,{className:`cal-page`,children:[(0,M.jsxs)(`header`,{className:`cal-header`,children:[(0,M.jsxs)(`div`,{className:`cal-title`,children:[(0,M.jsx)(h,{size:20}),` Calendar`]}),(0,M.jsxs)(`div`,{className:`cal-nav`,children:[(0,M.jsx)(`button`,{type:`button`,className:`cal-today-btn`,onClick:x,children:`Today`}),(0,M.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:S,"aria-label":`Previous`,children:(0,M.jsx)(i,{size:18})}),(0,M.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:C,"aria-label":`Next`,children:(0,M.jsx)(g,{size:18})}),(0,M.jsx)(`span`,{className:`cal-range-label`,children:ae(o,c)}),f&&(0,M.jsx)(t,{size:16,className:`spin`})]}),(0,M.jsx)(`div`,{className:`cal-views`,children:ie.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`cal-view-btn${e===o?` cal-view-btn-active`:``}`,onClick:()=>s(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),(0,M.jsxs)(`div`,{className:`cal-body`,children:[m&&(0,M.jsxs)(`div`,{className:`cal-error`,children:[`Could not load the calendar: `,m]}),o===`day`&&(0,M.jsx)(q,{anchor:c,meetings:u,onSelect:y}),o===`week`&&(0,M.jsx)(W,{anchor:c,meetings:u,onSelect:y}),o===`month`&&(0,M.jsx)(I,{anchor:c,meetings:u,onSelect:y}),o===`year`&&(0,M.jsx)(ee,{anchor:c,meetings:u,onPickMonth:w})]}),v&&(0,M.jsx)(re,{meeting:v,adminFetch:r,onClose:()=>y(null),onSaved:T,onDeleted:E})]})}(0,y.createRoot)(document.getElementById(`root`)).render((0,M.jsx)(oe,{}));
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Calendar — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/calendar-DFywoZ75.js"></script>
8
+ <script type="module" crossorigin src="/assets/calendar-CgVgCBhg.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/OperatorConversations-g7aAQCDn.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/AdminShell-D3N3Aq04.js">
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CAM3fms7.js";import{A as t,B as n,C as r,I as i,O as a,R as o,T as s,U as c,V as l,v as u,w as d}from"./OperatorConversations-g7aAQCDn.js";import{d as f,g as p,t as m}from"./AdminShell-D3N3Aq04.js";var h=o(`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`}]]),g=o(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),_=o(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),v=o(`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`}]]),y=l(),b=e(c(),1);function x(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function S(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function C(e){let t=x(e),n=t.getDay();return S(t,n===0?-6:1-n)}function w(e){let t=C(e);return Array.from({length:7},(e,n)=>S(t,n))}function T(e){let t=C(new Date(e.getFullYear(),e.getMonth(),1));return Array.from({length:42},(e,n)=>S(t,n))}function E(){return Array.from({length:24},(e,t)=>t)}function D(e){let t=e.getFullYear();return Array.from({length:12},(e,n)=>new Date(t,n,1))}function O(e,t){switch(e){case`day`:{let e=x(t);return{from:e,to:S(e,1)}}case`week`:{let e=C(t);return{from:e,to:S(e,7)}}case`month`:{let e=C(new Date(t.getFullYear(),t.getMonth(),1));return{from:e,to:S(e,42)}}case`year`:return{from:new Date(t.getFullYear(),0,1),to:new Date(t.getFullYear()+1,0,1)}}}function k(e,t,n){switch(e){case`day`:return S(t,n);case`week`:return S(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 A(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function j(e,t){return{role:`button`,tabIndex:0,onClick:()=>t(e),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t(e))}}}var M=r(),N=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],P=3;function F(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function I({anchor:e,meetings:t,onSelect:n}){let r=T(e),i=e.getMonth(),a=new Date;return(0,M.jsxs)(`div`,{className:`cal-month`,children:[(0,M.jsx)(`div`,{className:`cal-weekday-row`,children:N.map(e=>(0,M.jsx)(`div`,{className:`cal-weekday`,children:e},e))}),(0,M.jsx)(`div`,{className:`cal-month-grid`,children:r.map(e=>{let r=t.filter(t=>A(new Date(t.startsAt),e)).sort((e,t)=>e.startsAt.localeCompare(t.startsAt)),o=e.getMonth()!==i,s=A(e,a);return(0,M.jsxs)(`div`,{className:`cal-cell${o?` cal-cell-out`:``}${s?` cal-cell-today`:``}`,children:[(0,M.jsx)(`div`,{className:`cal-cell-num`,children:e.getDate()}),r.slice(0,P).map(e=>(0,M.jsxs)(`div`,{className:`cal-chip`,title:e.title??`Untitled`,...j(e,n),children:[!e.isAllDay&&(0,M.jsx)(`span`,{className:`cal-chip-time`,children:F(new Date(e.startsAt))}),e.title??`Untitled`]},e.meetingId)),r.length>P&&(0,M.jsxs)(`div`,{className:`cal-more`,children:[`+`,r.length-P,` more`]})]},e.toISOString())})})]})}var L=1440,R=1.8;function z(e){return e.getHours()*60+e.getMinutes()}function B(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function V({day:e,meetings:t,hourHeight:n,onSelect:r}){let i=n*24,a=t.filter(t=>!t.isAllDay&&A(new Date(t.startsAt),e));return(0,M.jsx)(`div`,{className:`cal-day-col`,children:(0,M.jsxs)(`div`,{className:`cal-hours`,style:{height:`${i}px`},children:[Array.from({length:24},(e,t)=>(0,M.jsx)(`div`,{className:`cal-hour-line`,style:{top:`${t*n}px`}},t)),a.map(t=>{let n=new Date(t.startsAt),i=t.endsAt?new Date(t.endsAt):new Date(n.getTime()+30*6e4),a=z(n),o=A(i,e)?z(i):L,s=a/L*100,c=Math.max((o-a)/L*100,R);return(0,M.jsxs)(`div`,{className:`cal-event`,style:{top:`${s}%`,height:`${c}%`},title:t.title??`Untitled`,...j(t,r),children:[(0,M.jsx)(`span`,{className:`cal-event-time`,children:B(n)}),(0,M.jsx)(`span`,{className:`cal-event-title`,children:t.title??`Untitled`})]},t.meetingId)})]})})}var H=44;function U(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function W({anchor:e,meetings:t,onSelect:n}){let r=w(e),i=new Date;return(0,M.jsxs)(`div`,{className:`cal-timed`,children:[(0,M.jsxs)(`div`,{className:`cal-day-headrow`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`}),r.map(e=>(0,M.jsxs)(`div`,{className:`cal-day-head${A(e,i)?` cal-day-head-today`:``}`,children:[(0,M.jsx)(`span`,{className:`cal-day-head-name`,children:e.toLocaleDateString([],{weekday:`short`})}),(0,M.jsx)(`span`,{className:`cal-day-head-num`,children:e.getDate()})]},e.toISOString()))]}),(0,M.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),r.map(e=>(0,M.jsx)(`div`,{className:`cal-allday-cell`,children:t.filter(t=>t.isAllDay&&A(new Date(t.startsAt),e)).map(e=>(0,M.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,...j(e,n),children:e.title??`Untitled`},e.meetingId))},e.toISOString()))]}),(0,M.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:E().map(e=>(0,M.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${H}px`},children:e===0?``:U(e)},e))}),r.map(e=>(0,M.jsx)(V,{day:e,meetings:t,hourHeight:H,onSelect:n},e.toISOString()))]})]})}var G=52;function K(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function q({anchor:e,meetings:t,onSelect:n}){let r=t.filter(t=>t.isAllDay&&A(new Date(t.startsAt),e));return(0,M.jsxs)(`div`,{className:`cal-timed cal-timed-single`,children:[(0,M.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),(0,M.jsx)(`div`,{className:`cal-allday-cell`,children:r.map(e=>(0,M.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,...j(e,n),children:e.title??`Untitled`},e.meetingId))})]}),(0,M.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,M.jsx)(`div`,{className:`cal-timed-gutter`,children:E().map(e=>(0,M.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${G}px`},children:e===0?``:K(e)},e))}),(0,M.jsx)(V,{day:e,meetings:t,hourHeight:G,onSelect:n})]})]})}var J=[`M`,`T`,`W`,`T`,`F`,`S`,`S`];function Y(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function ee({anchor:e,meetings:t,onPickMonth:n}){let r=new Date,i=new Set(t.map(e=>Y(new Date(e.startsAt))));return(0,M.jsx)(`div`,{className:`cal-year`,children:(0,M.jsx)(`div`,{className:`cal-year-grid`,children:D(e).map(e=>{let t=T(e),a=e.getMonth();return(0,M.jsxs)(`button`,{type:`button`,className:`cal-mini`,onClick:()=>n(e),title:e.toLocaleDateString([],{month:`long`,year:`numeric`}),children:[(0,M.jsx)(`div`,{className:`cal-mini-title`,children:e.toLocaleDateString([],{month:`long`})}),(0,M.jsx)(`div`,{className:`cal-mini-weekrow`,children:J.map((e,t)=>(0,M.jsx)(`span`,{className:`cal-mini-weekday`,children:e},t))}),(0,M.jsx)(`div`,{className:`cal-mini-grid`,children:t.map(e=>{let t=e.getMonth()!==a,n=A(e,r),o=!t&&i.has(Y(e));return(0,M.jsxs)(`span`,{className:`cal-mini-day${t?` cal-mini-day-out`:``}${n?` cal-mini-day-today`:``}`,children:[e.getDate(),o&&(0,M.jsx)(`span`,{className:`cal-mini-dot`})]},e.toISOString())})})]},a)})})})}var te={meeting:`Meeting`,event:`Appointment`,task:`Task`};function X(e){let t=new Date(e),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 Z(e){return new Date(e).toISOString()}function Q(e){return Math.floor(new Date(e).getTime()/6e4)}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=t.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`});return e.endsAt?`${n} · ${r} – ${new Date(e.endsAt).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}`:`${n} · ${r}`}function re({meeting:e,adminFetch:n,onClose:r,onSaved:i,onDeleted:o}){let c=e.kind===`meeting`,[l,u]=(0,b.useState)(!1),[p,m]=(0,b.useState)(!1),[g,y]=(0,b.useState)(!1),[x,S]=(0,b.useState)(null),[C,w]=(0,b.useState)(e.title??``),[T,E]=(0,b.useState)(X(e.startsAt)),[D,O]=(0,b.useState)(e.endsAt?X(e.endsAt):``),[k,A]=(0,b.useState)(e.location??``);(0,b.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!g&&r()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[g,r]);let j=(0,b.useCallback)(()=>{let t={},n=C.trim();n!==(e.title??``)&&(t.title=n);let r=Z(T);Q(r)!==Q(e.startsAt)&&(t.startsAt=r);let i=D?Z(D):null;(i===null?e.endsAt!==null:e.endsAt===null||Q(i)!==Q(e.endsAt))&&(t.endsAt=i);let a=k.trim()||null;return a!==(e.location??null)&&(t.location=a),t},[C,T,D,k,e]),N=(0,b.useCallback)(async()=>{let t=j();if(Object.keys(t).length===0){u(!1);return}y(!0),S(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}`);i((await r.json()).meeting)}catch(e){S(e instanceof Error?e.message:`Save failed`)}finally{y(!1)}},[n,j,e.meetingId,i]),P=(0,b.useCallback)(async()=>{y(!0),S(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){S(e instanceof Error?e.message:`Delete failed`),y(!1)}},[n,e.meetingId,o]),F=te[e.kind??`meeting`];return(0,M.jsx)(`div`,{className:`cal-modal-overlay`,onClick:()=>{g||r()},children:(0,M.jsxs)(`div`,{className:`cal-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":l?`Edit meeting`:`Meeting detail`,onClick:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:`cal-modal-header`,children:[(0,M.jsx)(`span`,{className:`cal-modal-kind`,children:F}),(0,M.jsx)(`button`,{type:`button`,className:`cal-modal-close`,onClick:r,"aria-label":`Close`,autoFocus:!0,disabled:g,children:(0,M.jsx)(d,{size:16})})]}),!l&&(0,M.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,M.jsx)(`div`,{className:`cal-modal-title`,children:e.title??`Untitled`}),(0,M.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,M.jsx)(_,{size:14}),(0,M.jsx)(`span`,{children:ne(e)})]}),e.location&&(0,M.jsxs)(`div`,{className:`cal-modal-row`,children:[(0,M.jsx)(v,{size:14}),(0,M.jsx)(`span`,{children:e.location})]}),e.attendees.length>0&&(0,M.jsxs)(`div`,{className:`cal-modal-row cal-modal-row-top`,children:[(0,M.jsx)(f,{size:14}),(0,M.jsx)(`span`,{children:e.attendees.map(e=>e.name||e.email||`Unknown`).join(`, `)})]}),(0,M.jsxs)(`div`,{className:`cal-modal-row cal-modal-meta`,children:[(0,M.jsx)(h,{size:14}),(0,M.jsx)(`span`,{children:F})]})]}),l&&(0,M.jsxs)(`div`,{className:`cal-modal-body`,children:[(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`Title`}),(0,M.jsx)(`input`,{type:`text`,value:C,onChange:e=>w(e.target.value),disabled:g})]}),(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`Start`}),(0,M.jsx)(`input`,{type:`datetime-local`,value:T,onChange:e=>E(e.target.value),disabled:g})]}),(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`End`}),(0,M.jsx)(`input`,{type:`datetime-local`,value:D,onChange:e=>O(e.target.value),disabled:g})]}),(0,M.jsxs)(`label`,{className:`cal-modal-field`,children:[(0,M.jsx)(`span`,{children:`Location`}),(0,M.jsx)(`input`,{type:`text`,value:k,onChange:e=>A(e.target.value),disabled:g})]})]}),x&&(0,M.jsx)(`div`,{className:`cal-modal-error`,children:x}),c&&(0,M.jsxs)(`div`,{className:`cal-modal-actions`,children:[!l&&!p&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>u(!0),children:[(0,M.jsx)(a,{size:14}),` Edit`]}),(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:()=>m(!0),children:[(0,M.jsx)(s,{size:14}),` Delete`]})]}),l&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-primary`,onClick:N,disabled:g,children:[g?(0,M.jsx)(t,{size:14,className:`spin`}):null,` Save`]}),(0,M.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>{u(!1),S(null)},disabled:g,children:`Cancel`})]}),p&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:`cal-modal-confirm-text`,children:`Delete this meeting?`}),(0,M.jsxs)(`button`,{type:`button`,className:`cal-modal-btn cal-modal-btn-danger`,onClick:P,disabled:g,children:[g?(0,M.jsx)(t,{size:14,className:`spin`}):null,` Delete`]}),(0,M.jsx)(`button`,{type:`button`,className:`cal-modal-btn`,onClick:()=>m(!1),disabled:g,children:`Cancel`})]})]})]})})}var $=`maxy-admin-session-key`,ie=[`day`,`week`,`month`,`year`];function ae(e,t){switch(e){case`day`:return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});case`week`:{let{from:e,to:n}=O(`week`,t),r=new Date(n.getTime()-1);return`${e.toLocaleDateString([],{day:`numeric`,month:`short`})} – ${r.toLocaleDateString([],{day:`numeric`,month:`short`,year:`numeric`})}`}case`month`:return t.toLocaleDateString([],{month:`long`,year:`numeric`});case`year`:return String(t.getFullYear())}}function oe(){let[e,n]=(0,b.useState)(null),[r,i]=(0,b.useState)(!1),[a,o]=(0,b.useState)(void 0),[s,c]=(0,b.useState)(null),[l,d]=(0,b.useState)(void 0),[f,h]=(0,b.useState)(null),[g,_]=(0,b.useState)(null);(0,b.useEffect)(()=>{let e=!1,t=null;try{t=sessionStorage.getItem($)}catch{}if(!t){i(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(t)}`).then(async r=>{if(!e){if(r.status===401){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`;return}if(r.ok)try{let e=await r.json();typeof e.businessName==`string`&&o(e.businessName),e.sessionId!==void 0&&c(e.sessionId??null),_(e.role??null),d(e.userName===void 0?null:e.userName),h(e.avatar??null)}catch{}n(t),i(!0)}}).catch(()=>{e||(n(t),i(!0))}),()=>{e=!0}},[]);let v=(0,b.useCallback)(()=>{try{sessionStorage.removeItem($)}catch{}window.location.href=`/`},[]),[y,x]=(0,b.useState)(!1),S=(0,b.useCallback)(async()=>{x(!0);try{let e=await p();if(e){try{sessionStorage.removeItem($)}catch{}window.location.href=`/`}return e}finally{x(!1)}},[]);return r?e?(0,M.jsx)(u,{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,M.jsx)(m,{cacheKey:e,businessName:a,sessionId:s,onLogout:v,onDisconnect:S,disconnecting:y,userName:l,userAvatar:f,role:g,children:(0,M.jsx)(se,{cacheKey:e})})}):(0,M.jsx)(`div`,{className:`cal-page`,children:(0,M.jsxs)(`div`,{className:`cal-empty`,children:[(0,M.jsx)(`p`,{children:`You are not signed in.`}),(0,M.jsxs)(`p`,{children:[`Open the `,(0,M.jsx)(`a`,{href:`/`,className:`cal-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,M.jsx)(`div`,{className:`cal-page`,children:(0,M.jsxs)(`div`,{className:`cal-loading`,children:[(0,M.jsx)(t,{size:18,className:`spin`}),` Loading…`]})})}function se({cacheKey:e}){let{adminFetch:r,sessionRefetchNonce:a}=n({initialCacheKey:e,surface:`calendar`}),[o,s]=(0,b.useState)(`month`),[c,l]=(0,b.useState)(()=>new Date),[u,d]=(0,b.useState)([]),[f,p]=(0,b.useState)(!1),[m,_]=(0,b.useState)(null),[v,y]=(0,b.useState)(null);(0,b.useEffect)(()=>{let e=!1,{from:t,to:n}=O(o,c);return p(!0),_(null),r(`/api/admin/calendar/meetings?from=${encodeURIComponent(t.toISOString())}&to=${encodeURIComponent(n.toISOString())}`).then(async t=>{if(e)return;if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();d(Array.isArray(n.meetings)?n.meetings:[])}).catch(t=>{e||(_(t instanceof Error?t.message:`Failed to load`),d([]))}).finally(()=>{e||p(!1)}),()=>{e=!0}},[o,c,a,r]);let x=(0,b.useCallback)(()=>l(new Date),[]),S=(0,b.useCallback)(()=>l(e=>k(o,e,-1)),[o]),C=(0,b.useCallback)(()=>l(e=>k(o,e,1)),[o]),w=(0,b.useCallback)(e=>{l(e),s(`month`)},[]);(0,b.useEffect)(()=>{y(null)},[o,c]);let T=(0,b.useCallback)(e=>{d(t=>t.map(t=>t.meetingId===e.meetingId?e:t)),y(e)},[]),E=(0,b.useCallback)(e=>{d(t=>t.filter(t=>t.meetingId!==e)),y(null)},[]);return(0,M.jsxs)(`div`,{className:`cal-page`,children:[(0,M.jsxs)(`header`,{className:`cal-header`,children:[(0,M.jsxs)(`div`,{className:`cal-title`,children:[(0,M.jsx)(h,{size:20}),` Calendar`]}),(0,M.jsxs)(`div`,{className:`cal-nav`,children:[(0,M.jsx)(`button`,{type:`button`,className:`cal-today-btn`,onClick:x,children:`Today`}),(0,M.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:S,"aria-label":`Previous`,children:(0,M.jsx)(i,{size:18})}),(0,M.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:C,"aria-label":`Next`,children:(0,M.jsx)(g,{size:18})}),(0,M.jsx)(`span`,{className:`cal-range-label`,children:ae(o,c)}),f&&(0,M.jsx)(t,{size:16,className:`spin`})]}),(0,M.jsx)(`div`,{className:`cal-views`,children:ie.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`cal-view-btn${e===o?` cal-view-btn-active`:``}`,onClick:()=>s(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),(0,M.jsxs)(`div`,{className:`cal-body`,children:[m&&(0,M.jsxs)(`div`,{className:`cal-error`,children:[`Could not load the calendar: `,m]}),o===`day`&&(0,M.jsx)(q,{anchor:c,meetings:u,onSelect:y}),o===`week`&&(0,M.jsx)(W,{anchor:c,meetings:u,onSelect:y}),o===`month`&&(0,M.jsx)(I,{anchor:c,meetings:u,onSelect:y}),o===`year`&&(0,M.jsx)(ee,{anchor:c,meetings:u,onPickMonth:w})]}),v&&(0,M.jsx)(re,{meeting:v,adminFetch:r,onClose:()=>y(null),onSaved:T,onDeleted:E})]})}(0,y.createRoot)(document.getElementById(`root`)).render((0,M.jsx)(oe,{}));