@rubytech/create-maxy-code 0.1.344 → 0.1.345

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 (29) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +4 -2
  3. package/payload/platform/plugins/docs/references/calendar-booking.md +3 -1
  4. package/payload/server/public/assets/{AdminLoginScreens-CZqsFfP0.js → AdminLoginScreens-CpE_Nf5z.js} +1 -1
  5. package/payload/server/public/assets/{AdminShell-DnhBRZv5.js → AdminShell-D3N3Aq04.js} +1 -1
  6. package/payload/server/public/assets/{Checkbox-D0FwyuVg.js → Checkbox-DQGuYIRH.js} +1 -1
  7. package/payload/server/public/assets/{OperatorConversations-BG9GrxQU.css → OperatorConversations-DLfQEw1r.css} +1 -1
  8. package/payload/server/public/assets/{admin-CCzmqd1F.js → admin-BU0dY3_T.js} +1 -1
  9. package/payload/server/public/assets/{browser-kmrJq69n.js → browser-B5ytGJAE.js} +1 -1
  10. package/payload/server/public/assets/calendar-DFywoZ75.js +1 -0
  11. package/payload/server/public/assets/chat-cxTK--65.js +1 -0
  12. package/payload/server/public/assets/{data-CZKWSjEH.js → data-BVPOzSZ7.js} +1 -1
  13. package/payload/server/public/assets/{graph-BxErrIf_.js → graph-D0fPx1nX.js} +1 -1
  14. package/payload/server/public/assets/{graph-labels-Ch5_g_JF.js → graph-labels-C4dkheQ8.js} +1 -1
  15. package/payload/server/public/assets/{operator-CdlBsCdn.js → operator-DyrF6PQi.js} +1 -1
  16. package/payload/server/public/assets/{page-DzsVxvM6.js → page-BPIaNNW1.js} +1 -1
  17. package/payload/server/public/assets/{public-BzVhn2va.js → public-BrIaS6m3.js} +1 -1
  18. package/payload/server/public/browser.html +4 -4
  19. package/payload/server/public/calendar.html +4 -4
  20. package/payload/server/public/chat.html +5 -5
  21. package/payload/server/public/data.html +4 -4
  22. package/payload/server/public/graph.html +6 -6
  23. package/payload/server/public/index.html +6 -6
  24. package/payload/server/public/operator.html +7 -7
  25. package/payload/server/public/public.html +5 -5
  26. package/payload/server/server.js +108 -4
  27. package/payload/server/public/assets/calendar-BWf5qrIH.js +0 -1
  28. package/payload/server/public/assets/chat-C2e06_q0.js +0 -1
  29. /package/payload/server/public/assets/{OperatorConversations-dt0q8mjv.js → OperatorConversations-g7aAQCDn.js} +0 -0
@@ -17582,6 +17582,22 @@ var browser_default = app42;
17582
17582
 
17583
17583
  // server/routes/admin/calendar.ts
17584
17584
  var app43 = new Hono();
17585
+ function normalizeAttendees(raw) {
17586
+ if (!Array.isArray(raw)) return [];
17587
+ return raw.map((a) => {
17588
+ const rec = a ?? {};
17589
+ return {
17590
+ name: typeof rec.name === "string" ? rec.name : null,
17591
+ email: typeof rec.email === "string" ? rec.email : null
17592
+ };
17593
+ });
17594
+ }
17595
+ var EDITABLE_FIELDS = ["title", "startsAt", "endsAt", "location"];
17596
+ var MEETING_RETURN = `RETURN elementId(m) AS id, m.title AS title,
17597
+ toString(m.startsAt) AS startsAt, toString(m.endsAt) AS endsAt,
17598
+ m.location AS location, coalesce(m.isAllDay, false) AS isAllDay,
17599
+ 'meeting' AS kind, m.uid AS uid,
17600
+ [(p:Person)-[:ATTENDED]->(m) | {name: coalesce(p.displayName, p.email), email: p.email}] AS attendees`;
17585
17601
  app43.get("/meetings", requireAdminSession, async (c) => {
17586
17602
  const cacheKey = c.var.cacheKey;
17587
17603
  const accountId = getAccountIdForSession(cacheKey);
@@ -17601,7 +17617,8 @@ app43.get("/meetings", requireAdminSession, async (c) => {
17601
17617
  RETURN elementId(m) AS id, m.title AS title,
17602
17618
  toString(m.startsAt) AS startsAt, toString(m.endsAt) AS endsAt,
17603
17619
  m.location AS location, coalesce(m.isAllDay, false) AS isAllDay,
17604
- 'meeting' AS kind
17620
+ 'meeting' AS kind,
17621
+ [(p:Person)-[:ATTENDED]->(m) | {name: coalesce(p.displayName, p.email), email: p.email}] AS attendees
17605
17622
  UNION
17606
17623
  MATCH (e:Event {accountId: $accountId})
17607
17624
  WHERE e.actionPlugin IS NULL
@@ -17611,7 +17628,8 @@ app43.get("/meetings", requireAdminSession, async (c) => {
17611
17628
  toString(datetime(e.startDate)) AS startsAt,
17612
17629
  CASE WHEN e.endDate IS NULL THEN null ELSE toString(datetime(e.endDate)) END AS endsAt,
17613
17630
  e.location AS location, false AS isAllDay,
17614
- 'event' AS kind
17631
+ 'event' AS kind,
17632
+ [] AS attendees
17615
17633
  UNION
17616
17634
  MATCH (t:Task {accountId: $accountId})
17617
17635
  WHERE t.dueDate IS NOT NULL
@@ -17620,7 +17638,8 @@ app43.get("/meetings", requireAdminSession, async (c) => {
17620
17638
  RETURN elementId(t) AS id, t.name AS title,
17621
17639
  toString(datetime(t.dueDate)) AS startsAt, null AS endsAt,
17622
17640
  null AS location, true AS isAllDay,
17623
- 'task' AS kind`,
17641
+ 'task' AS kind,
17642
+ [] AS attendees`,
17624
17643
  { accountId, from, to }
17625
17644
  );
17626
17645
  const meetings = res.records.map((r) => ({
@@ -17630,7 +17649,8 @@ app43.get("/meetings", requireAdminSession, async (c) => {
17630
17649
  endsAt: r.get("endsAt"),
17631
17650
  location: r.get("location"),
17632
17651
  isAllDay: r.get("isAllDay"),
17633
- kind: r.get("kind")
17652
+ kind: r.get("kind"),
17653
+ attendees: normalizeAttendees(r.get("attendees"))
17634
17654
  })).sort((a, b) => new Date(a.startsAt).getTime() - new Date(b.startsAt).getTime());
17635
17655
  const counts = { meeting: 0, event: 0, task: 0 };
17636
17656
  for (const m of meetings) counts[m.kind]++;
@@ -17646,6 +17666,90 @@ app43.get("/meetings", requireAdminSession, async (c) => {
17646
17666
  await session.close();
17647
17667
  }
17648
17668
  });
17669
+ app43.patch("/meetings/:id", requireAdminSession, async (c) => {
17670
+ const cacheKey = c.var.cacheKey;
17671
+ const accountId = getAccountIdForSession(cacheKey);
17672
+ if (!accountId) {
17673
+ console.error('[calendar] op=admin-edit auth-rejected reason="no account for session"');
17674
+ return c.json({ error: "Account not found for session" }, 401);
17675
+ }
17676
+ const id = c.req.param("id");
17677
+ const body = await safeJson(c) ?? {};
17678
+ const fields = EDITABLE_FIELDS.filter((f) => f in body);
17679
+ if (fields.length === 0) {
17680
+ return c.json({ error: "No editable field supplied (title, startsAt, endsAt, location)" }, 400);
17681
+ }
17682
+ const setClauses = fields.map(
17683
+ (f) => f === "startsAt" || f === "endsAt" ? `m.${f} = datetime($${f})` : `m.${f} = $${f}`
17684
+ );
17685
+ setClauses.push("m.updatedAt = datetime()");
17686
+ const params = { accountId, id };
17687
+ for (const f of fields) params[f] = body[f];
17688
+ const session = getSession();
17689
+ try {
17690
+ const res = await session.run(
17691
+ `MATCH (m:Meeting {accountId: $accountId})
17692
+ WHERE elementId(m) = $id
17693
+ SET ${setClauses.join(", ")}
17694
+ ${MEETING_RETURN}`,
17695
+ params
17696
+ );
17697
+ if (res.records.length === 0) {
17698
+ console.warn(`[calendar-edit] account=${accountId.slice(0, 8)} uid=absent fields=${fields.join(",")} found=0`);
17699
+ return c.json({ error: "Meeting not found for this account" }, 404);
17700
+ }
17701
+ const r = res.records[0];
17702
+ const uid = r.get("uid");
17703
+ console.log(`[calendar-edit] account=${accountId.slice(0, 8)} uid=${uid ?? "absent"} fields=${fields.join(",")}`);
17704
+ const meeting = {
17705
+ meetingId: r.get("id"),
17706
+ title: r.get("title"),
17707
+ startsAt: r.get("startsAt"),
17708
+ endsAt: r.get("endsAt"),
17709
+ location: r.get("location"),
17710
+ isAllDay: r.get("isAllDay"),
17711
+ kind: "meeting",
17712
+ attendees: normalizeAttendees(r.get("attendees"))
17713
+ };
17714
+ return c.json({ meeting });
17715
+ } catch (err) {
17716
+ const message = err instanceof Error ? err.message : String(err);
17717
+ console.error(`[calendar-edit] op=fail err="${message}"`);
17718
+ return c.json({ error: `Edit failed: ${message}` }, 503);
17719
+ } finally {
17720
+ await session.close();
17721
+ }
17722
+ });
17723
+ app43.delete("/meetings/:id", requireAdminSession, async (c) => {
17724
+ const cacheKey = c.var.cacheKey;
17725
+ const accountId = getAccountIdForSession(cacheKey);
17726
+ if (!accountId) {
17727
+ console.error('[calendar] op=admin-delete auth-rejected reason="no account for session"');
17728
+ return c.json({ error: "Account not found for session" }, 401);
17729
+ }
17730
+ const id = c.req.param("id");
17731
+ const session = getSession();
17732
+ try {
17733
+ const res = await session.run(
17734
+ `MATCH (m:Meeting {accountId: $accountId})
17735
+ WHERE elementId(m) = $id
17736
+ WITH m, m.uid AS uid
17737
+ DETACH DELETE m
17738
+ RETURN uid`,
17739
+ { accountId, id }
17740
+ );
17741
+ const found = res.records.length > 0;
17742
+ const uid = found ? res.records[0].get("uid") : null;
17743
+ console.log(`[calendar-delete] account=${accountId.slice(0, 8)} uid=${uid ?? "absent"} found=${found ? 1 : 0}`);
17744
+ return c.json({ found });
17745
+ } catch (err) {
17746
+ const message = err instanceof Error ? err.message : String(err);
17747
+ console.error(`[calendar-delete] op=fail err="${message}"`);
17748
+ return c.json({ error: `Delete failed: ${message}` }, 503);
17749
+ } finally {
17750
+ await session.close();
17751
+ }
17752
+ });
17649
17753
  var calendar_default = app43;
17650
17754
 
17651
17755
  // server/routes/admin/index.ts
@@ -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,R as a,U as o,V as s,v as c}from"./OperatorConversations-dt0q8mjv.js";import{g as l,t as u}from"./AdminShell-DnhBRZv5.js";var d=a(`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`}]]),f=a(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),p=s(),m=e(o(),1);function h(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function g(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function _(e){let t=h(e),n=t.getDay();return g(t,n===0?-6:1-n)}function v(e){let t=_(e);return Array.from({length:7},(e,n)=>g(t,n))}function y(e){let t=_(new Date(e.getFullYear(),e.getMonth(),1));return Array.from({length:42},(e,n)=>g(t,n))}function b(){return Array.from({length:24},(e,t)=>t)}function x(e){let t=e.getFullYear();return Array.from({length:12},(e,n)=>new Date(t,n,1))}function S(e,t){switch(e){case`day`:{let e=h(t);return{from:e,to:g(e,1)}}case`week`:{let e=_(t);return{from:e,to:g(e,7)}}case`month`:{let e=_(new Date(t.getFullYear(),t.getMonth(),1));return{from:e,to:g(e,42)}}case`year`:return{from:new Date(t.getFullYear(),0,1),to:new Date(t.getFullYear()+1,0,1)}}}function C(e,t,n){switch(e){case`day`:return g(t,n);case`week`:return g(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 w(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}var T=r(),E=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],D=3;function O(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function k({anchor:e,meetings:t}){let n=y(e),r=e.getMonth(),i=new Date;return(0,T.jsxs)(`div`,{className:`cal-month`,children:[(0,T.jsx)(`div`,{className:`cal-weekday-row`,children:E.map(e=>(0,T.jsx)(`div`,{className:`cal-weekday`,children:e},e))}),(0,T.jsx)(`div`,{className:`cal-month-grid`,children:n.map(e=>{let n=t.filter(t=>w(new Date(t.startsAt),e)).sort((e,t)=>e.startsAt.localeCompare(t.startsAt)),a=e.getMonth()!==r,o=w(e,i);return(0,T.jsxs)(`div`,{className:`cal-cell${a?` cal-cell-out`:``}${o?` cal-cell-today`:``}`,children:[(0,T.jsx)(`div`,{className:`cal-cell-num`,children:e.getDate()}),n.slice(0,D).map(e=>(0,T.jsxs)(`div`,{className:`cal-chip`,title:e.title??`Untitled`,children:[!e.isAllDay&&(0,T.jsx)(`span`,{className:`cal-chip-time`,children:O(new Date(e.startsAt))}),e.title??`Untitled`]},e.meetingId)),n.length>D&&(0,T.jsxs)(`div`,{className:`cal-more`,children:[`+`,n.length-D,` more`]})]},e.toISOString())})})]})}var A=1440,j=1.8;function M(e){return e.getHours()*60+e.getMinutes()}function N(e){return e.toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function P({day:e,meetings:t,hourHeight:n}){let r=n*24,i=t.filter(t=>!t.isAllDay&&w(new Date(t.startsAt),e));return(0,T.jsx)(`div`,{className:`cal-day-col`,children:(0,T.jsxs)(`div`,{className:`cal-hours`,style:{height:`${r}px`},children:[Array.from({length:24},(e,t)=>(0,T.jsx)(`div`,{className:`cal-hour-line`,style:{top:`${t*n}px`}},t)),i.map(t=>{let n=new Date(t.startsAt),r=t.endsAt?new Date(t.endsAt):new Date(n.getTime()+30*6e4),i=M(n),a=w(r,e)?M(r):A,o=i/A*100,s=Math.max((a-i)/A*100,j);return(0,T.jsxs)(`div`,{className:`cal-event`,style:{top:`${o}%`,height:`${s}%`},title:t.title??`Untitled`,children:[(0,T.jsx)(`span`,{className:`cal-event-time`,children:N(n)}),(0,T.jsx)(`span`,{className:`cal-event-title`,children:t.title??`Untitled`})]},t.meetingId)})]})})}var F=44;function I(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function L({anchor:e,meetings:t}){let n=v(e),r=new Date;return(0,T.jsxs)(`div`,{className:`cal-timed`,children:[(0,T.jsxs)(`div`,{className:`cal-day-headrow`,children:[(0,T.jsx)(`div`,{className:`cal-timed-gutter`}),n.map(e=>(0,T.jsxs)(`div`,{className:`cal-day-head${w(e,r)?` cal-day-head-today`:``}`,children:[(0,T.jsx)(`span`,{className:`cal-day-head-name`,children:e.toLocaleDateString([],{weekday:`short`})}),(0,T.jsx)(`span`,{className:`cal-day-head-num`,children:e.getDate()})]},e.toISOString()))]}),(0,T.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,T.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),n.map(e=>(0,T.jsx)(`div`,{className:`cal-allday-cell`,children:t.filter(t=>t.isAllDay&&w(new Date(t.startsAt),e)).map(e=>(0,T.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,children:e.title??`Untitled`},e.meetingId))},e.toISOString()))]}),(0,T.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,T.jsx)(`div`,{className:`cal-timed-gutter`,children:b().map(e=>(0,T.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${F}px`},children:e===0?``:I(e)},e))}),n.map(e=>(0,T.jsx)(P,{day:e,meetings:t,hourHeight:F},e.toISOString()))]})]})}var R=52;function z(e){let t=new Date;return t.setHours(e,0,0,0),t.toLocaleTimeString([],{hour:`numeric`})}function B({anchor:e,meetings:t}){let n=t.filter(t=>t.isAllDay&&w(new Date(t.startsAt),e));return(0,T.jsxs)(`div`,{className:`cal-timed cal-timed-single`,children:[(0,T.jsxs)(`div`,{className:`cal-allday-band`,children:[(0,T.jsx)(`div`,{className:`cal-timed-gutter`,children:`All-day`}),(0,T.jsx)(`div`,{className:`cal-allday-cell`,children:n.map(e=>(0,T.jsx)(`div`,{className:`cal-allday-chip`,title:e.title??`Untitled`,children:e.title??`Untitled`},e.meetingId))})]}),(0,T.jsxs)(`div`,{className:`cal-timed-cols`,children:[(0,T.jsx)(`div`,{className:`cal-timed-gutter`,children:b().map(e=>(0,T.jsx)(`div`,{className:`cal-hour-label`,style:{height:`${R}px`},children:e===0?``:z(e)},e))}),(0,T.jsx)(P,{day:e,meetings:t,hourHeight:R})]})]})}var V=[`M`,`T`,`W`,`T`,`F`,`S`,`S`];function H(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function U({anchor:e,meetings:t,onPickMonth:n}){let r=new Date,i=new Set(t.map(e=>H(new Date(e.startsAt))));return(0,T.jsx)(`div`,{className:`cal-year`,children:(0,T.jsx)(`div`,{className:`cal-year-grid`,children:x(e).map(e=>{let t=y(e),a=e.getMonth();return(0,T.jsxs)(`button`,{type:`button`,className:`cal-mini`,onClick:()=>n(e),title:e.toLocaleDateString([],{month:`long`,year:`numeric`}),children:[(0,T.jsx)(`div`,{className:`cal-mini-title`,children:e.toLocaleDateString([],{month:`long`})}),(0,T.jsx)(`div`,{className:`cal-mini-weekrow`,children:V.map((e,t)=>(0,T.jsx)(`span`,{className:`cal-mini-weekday`,children:e},t))}),(0,T.jsx)(`div`,{className:`cal-mini-grid`,children:t.map(e=>{let t=e.getMonth()!==a,n=w(e,r),o=!t&&i.has(H(e));return(0,T.jsxs)(`span`,{className:`cal-mini-day${t?` cal-mini-day-out`:``}${n?` cal-mini-day-today`:``}`,children:[e.getDate(),o&&(0,T.jsx)(`span`,{className:`cal-mini-dot`})]},e.toISOString())})})]},a)})})})}var W=`maxy-admin-session-key`,G=[`day`,`week`,`month`,`year`];function K(e,t){switch(e){case`day`:return t.toLocaleDateString([],{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`});case`week`:{let{from:e,to:n}=S(`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 q(){let[e,n]=(0,m.useState)(null),[r,i]=(0,m.useState)(!1),[a,o]=(0,m.useState)(void 0),[s,d]=(0,m.useState)(null),[f,p]=(0,m.useState)(void 0),[h,g]=(0,m.useState)(null),[_,v]=(0,m.useState)(null);(0,m.useEffect)(()=>{let e=!1,t=null;try{t=sessionStorage.getItem(W)}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(W)}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&&d(e.sessionId??null),v(e.role??null),p(e.userName===void 0?null:e.userName),g(e.avatar??null)}catch{}n(t),i(!0)}}).catch(()=>{e||(n(t),i(!0))}),()=>{e=!0}},[]);let y=(0,m.useCallback)(()=>{try{sessionStorage.removeItem(W)}catch{}window.location.href=`/`},[]),[b,x]=(0,m.useState)(!1),S=(0,m.useCallback)(async()=>{x(!0);try{let e=await l();if(e){try{sessionStorage.removeItem(W)}catch{}window.location.href=`/`}return e}finally{x(!1)}},[]);return r?e?(0,T.jsx)(c,{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(W)}catch{}window.location.href=`/`},children:(0,T.jsx)(u,{cacheKey:e,businessName:a,sessionId:s,onLogout:y,onDisconnect:S,disconnecting:b,userName:f,userAvatar:h,role:_,children:(0,T.jsx)(J,{cacheKey:e})})}):(0,T.jsx)(`div`,{className:`cal-page`,children:(0,T.jsxs)(`div`,{className:`cal-empty`,children:[(0,T.jsx)(`p`,{children:`You are not signed in.`}),(0,T.jsxs)(`p`,{children:[`Open the `,(0,T.jsx)(`a`,{href:`/`,className:`cal-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,T.jsx)(`div`,{className:`cal-page`,children:(0,T.jsxs)(`div`,{className:`cal-loading`,children:[(0,T.jsx)(t,{size:18,className:`spin`}),` Loading…`]})})}function J({cacheKey:e}){let{adminFetch:r,sessionRefetchNonce:a}=n({initialCacheKey:e,surface:`calendar`}),[o,s]=(0,m.useState)(`month`),[c,l]=(0,m.useState)(()=>new Date),[u,p]=(0,m.useState)([]),[h,g]=(0,m.useState)(!1),[_,v]=(0,m.useState)(null);(0,m.useEffect)(()=>{let e=!1,{from:t,to:n}=S(o,c);return g(!0),v(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();p(Array.isArray(n.meetings)?n.meetings:[])}).catch(t=>{e||(v(t instanceof Error?t.message:`Failed to load`),p([]))}).finally(()=>{e||g(!1)}),()=>{e=!0}},[o,c,a,r]);let y=(0,m.useCallback)(()=>l(new Date),[]),b=(0,m.useCallback)(()=>l(e=>C(o,e,-1)),[o]),x=(0,m.useCallback)(()=>l(e=>C(o,e,1)),[o]),w=(0,m.useCallback)(e=>{l(e),s(`month`)},[]);return(0,T.jsxs)(`div`,{className:`cal-page`,children:[(0,T.jsxs)(`header`,{className:`cal-header`,children:[(0,T.jsxs)(`div`,{className:`cal-title`,children:[(0,T.jsx)(d,{size:20}),` Calendar`]}),(0,T.jsxs)(`div`,{className:`cal-nav`,children:[(0,T.jsx)(`button`,{type:`button`,className:`cal-today-btn`,onClick:y,children:`Today`}),(0,T.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:b,"aria-label":`Previous`,children:(0,T.jsx)(i,{size:18})}),(0,T.jsx)(`button`,{type:`button`,className:`cal-nav-btn`,onClick:x,"aria-label":`Next`,children:(0,T.jsx)(f,{size:18})}),(0,T.jsx)(`span`,{className:`cal-range-label`,children:K(o,c)}),h&&(0,T.jsx)(t,{size:16,className:`spin`})]}),(0,T.jsx)(`div`,{className:`cal-views`,children:G.map(e=>(0,T.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,T.jsxs)(`div`,{className:`cal-body`,children:[_&&(0,T.jsxs)(`div`,{className:`cal-error`,children:[`Could not load the calendar: `,_]}),o===`day`&&(0,T.jsx)(B,{anchor:c,meetings:u}),o===`week`&&(0,T.jsx)(L,{anchor:c,meetings:u}),o===`month`&&(0,T.jsx)(k,{anchor:c,meetings:u}),o===`year`&&(0,T.jsx)(U,{anchor:c,meetings:u,onPickMonth:w})]})]})}(0,p.createRoot)(document.getElementById(`root`)).render((0,T.jsx)(q,{}));
@@ -1 +0,0 @@
1
- import{C as e,V as t}from"./OperatorConversations-dt0q8mjv.js";import"./admin-types-Dg11L4MQ.js";import"./AdminShell-DnhBRZv5.js";import{n}from"./page-DzsVxvM6.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));